C语言并行程序编程(一)

这里先简单书写一个并行版的hello world 作为入门,后续的文章再更新相关的概念。

#include <stdio.h>
#include <stdlib.h>
#include <omp.h>

void Hello(void);

int main(int argc,char* argv[])
{
    int thread_count = strtol(argv[1],NULL,10);
    //获取线程数
#   pragma omp parallel num_threads(thread_count)
    Hello();
    return 0;
}

void Hello(void)
{
    int my_rank = omp_get_thread_num();
    //获取线程编号
    int thread_count = omp_get_num_threads();
    //获取线程数

    printf("Hello World from thread %d of %d\n",my_rank,thread_count);
}

接着运行一下,先看一下结果

在源文件的文件夹下打开终端输入: gcc -g -Wall -fopenmp -o test test.c

得到一个文件名为test的文件,接着输入:./test 4,得到运行结果

下面我先来解释一下编译命令的作用:

-g:允许使用调试器 ; -Wall:显示警告;-fopenmp:防止老版本的gcc不包含OpenMP的支持;

-o <outfile>: 便以后的可执行文件的文件名为outfile;./:用来给出可执行文件的路径;4代表开启的线程数。

接着我来解释一下源代码,可能会牵扯到一些术语,我会在后面的文章中作更详细的解释,在这里就不作过多的赘述了。

strtol函数:获取线程数,包含在<stdlib.h>中。其原型为:

long strtol(const char* number p  /* in */,
            char** end p         /* out */,
            int   base           /* in */
);

参数一是一个字符串,在这个例子中为命令行参数;参数二因为没有用到,所以传递了一个空指针;参数三是字符串所代表的数的基数,代码中的10代表十进制

在C/C++中,预处理指令以#pragma,在OpenMP中,常常以#pragma omp开始

parallel指令用来表明之后的结构化代码块(基本块)应该被多个线程并行执行。

将num_threads子句加入到parallel指令中,就允许程序员指定执行后代码块的线程数。

在Hello函数中,我们分别获取了线程的编号和线程数,它们的原型如下:

int my_rank = omp_get_thread_num(void);         //获取线程编号
int thread_count = omp_get_num_threads(void);   //获取线程数

相关概念我会在后面的文章中一一解释,欢迎大家一起来学习,QQ交流群:892747839

  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
C语言并行程序MPI(Message Passing Interface),是一种用于并行计算的编程模型。MPI允许在多个计算机之间进行进程间通信,以实现并行计算任务的协同工作。 MPI程序主要由多个进程组成,每个进程在不同的计算机上运行,并可以在运行时相互通信。通信是通过消息传递的方式来实现的,每个进程可以发送和接收消息。 在MPI程序中,通常会有一个主进程(通常被称为rank 0),负责协调整个计算任务的执行和结果的收集。其他进程(rank 1, rank 2等)则负责执行具体的任务。主进程可以把任务分成若干子任务,然后将这些子任务分发给其他进程并协调它们的执行。子进程在执行完任务后,可以将结果返回给主进程或者将结果发送给其他进程。 MPI程序可以在单个机器上运行,也可以在多台机器组成的集群上运行。在集群上运行MPI程序时,需要在每台机器上安装MPI库,并通过网络连接进行进程间通信。 MPI程序可以应用于各种并行计算任务,如科学计算、图像处理、数据挖掘等。通过将任务分解成小的子任务,并在多个计算机上同时执行,可以大大加快计算速度,提高程序的执行效率。 总之,C语言并行程序MPI提供了一个强大的工具,可以将计算任务分布到多个计算机上并实现进程间通信。通过合理的任务划分和结果的收集,可以实现高效的并行计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道人禅(armey)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值