【MPI并行计算】Parallel Rank程序

该题的背景是不同的进程在运行时可能会有不同的状态,在这里用数值表示,有时需要让每个进程知道自己在所有进程中处于什么位置。

首先每个进程使用自己的进程号作为随机数种子生成自己的一个随机数

【MPI并行计算】Parallel Rank程序_第1张图片

由于选择一个进程对所有进程数值进行排序时,该进程不仅要知道每个进程的数值,还要知道这个数值来自于哪个进程,所以这里使用结构体来存储进程号和进程数值,使用MPI_Gather时传递的是一个结构体

用于计算的进程接收所有结构体后将其存入一个结构体数组,进行排序

【MPI并行计算】Parallel Rank程序_第2张图片

进行排序后运行输出结果如下

【MPI并行计算】Parallel Rank程序_第3张图片

可以看到每个进程已经按其数值的大小进行排序了,但是根据要求

【MPI并行计算】Parallel Rank程序_第4张图片

排序后要按进程的顺序写入数组,以进程号为下标,数组中的内容为该进程在排序后所在的位置,所以还得需要一个数组用来存储每个进程的所在位置,而且还要按进程号的顺序分发给每个进程

【MPI并行计算】Parallel Rank程序_第5张图片

完整代码如下

【MPI并行计算】Parallel Rank程序_第6张图片

【MPI并行计算】Parallel Rank程序_第7张图片

运行结果如下

【MPI并行计算】Parallel Rank程序_第8张图片

拓展

 

稍微修改一下创建一万个进程就报错了

【MPI并行计算】Parallel Rank程序_第9张图片

创建100个可以运行,但是卡住了

【MPI并行计算】Parallel Rank程序_第10张图片

上面这个100个的强行停止后,在运行一个20个的出现问题

可能内存之前使用了但是没有清空,不大清楚

你可能感兴趣的:(#MPI并行计算#)