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 ); MPI_Send(&value, 1, MPI_INT, rank + 1, 0, MPI_COMM_WORLD);} else { 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; }
|
程序运行结果
| process 1 got 5 process 2 got 5 process 3 got 5
|