MPI学习(五)-环形拓扑上利用MPI进行通信

MPI学习(五)-环形拓扑上利用MPI进行通信

这里,我们演示了一个简单的MPI程序,它使用阻塞通信原语send和receive来进行广播操作:

程序运行平台

北京超级云计算中心A3分区

环境变量

mpi/intel/2017.5

编译指令

mpic++ mpi005.cpp -o mpi005

运行指令

srun -p amd_256 -N 1 -n 4 ./mpi005(使用SLURM任务调度系统)

1个分区,核数为4

程序源代码

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
#include <stdio.h>
#include <mpi.h>
int main(int argc,char *argv[])
{
int rank, value, size;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

if(rank == 0) {scanf("%d", &value );
/*Master node sends out the value*/
MPI_Send(&value, 1, MPI_INT, rank + 1, 0, MPI_COMM_WORLD);}//
else
{
/*Slave nodes block on receive the send on the value*/
//接受上一个进程发送的消息
MPI_Recv(&value, 1, MPI_INT, rank - 1, 0,MPI_COMM_WORLD, &status);

if(rank < size-1)
{
//向下一个进程发送消息
MPI_Send(&value, 1, MPI_INT, rank + 1, 0, MPI_COMM_WORLD);
}
printf("process %d got %d\n", rank, value);
}
MPI_Finalize();
return 0;
}

程序运行结果

1
2
3
4
//5 5为读入的value值
process 1 got 5
process 2 got 5
process 3 got 5

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!