在ubuntu18.04编写第一个并行程序

代码

vi mpi_hello.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//This is hello_world program in parell.
#include "mpi.h"
#include <stdio.h>
#include <math.h>
void main(argc,argv)
int argc;
char *argv[];
{
//myid和numprocs分别用来记录某一个并行执行的进程的标识和所有参加计算的进程的个数
int myid,numprocs;

//namelen是实际得到的机器的名字的长度
int namelen;

//MPI_MAX_PROCESSOR_NAME是MPI预定义的宏,即某⼀MPI的具体实现中允许机器名字的最⼤⻓度,机器名放在变量processor_name中
char processor_name[MPI_MAX_PROCESSOR_NAME];

//程序的开始,初始化
MPI_Init(&argc,&argv);

//得到当前正在运行的进程标识号,放在myid中
MPI_Comm_rank(MPI_COMM_WORLD,&myid);

//得到所有参加运算的进程的个数,放在numprocs中
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);

//MPI_Get_processor_name得到本进程运行的机器的名称,结果放在processor_name中,它是一个字符串,而该字符串的长度放在namelen中
MPI_Get_processor_name(processor_name,&namelen);

//fprintf将本进程的标识号,并⾏执⾏的进程的个数,本进程所运⾏的机器的名字打印出来
fprintf(stderr,"Hello World! Process %d of %d on %s\n",myid,numprocs,processor_name);

//程序的结束
MPI_Finalize();
}

#编译和运行
##编译
mpicc -g -Wall -o mpi_hello mpi_hello.c

1
2
3
4
5
6
mpicc         是编译C程序的
mpicxx 是编译C++程序的
-g 允许使用调试器
-Wall 显示警告(W大写)
-o outfile.o 编译出可执行的文件,文件名为outfile.o
-02 告诉编译器对代码进行优化

##运行
mpirun -n 4 ./mpi_hello

4为线程数,注意一定要标明文件位置
##结果
最后得到的结果为,有可能顺序不一样

1
2
3
4
Hello World! process 0 of 4!
Hello World! process 1 of 4!
Hello World! process 2 of 4!
Hello World! process 3 of 4!