我正在编写mpi python代码。例如,四个过程的数据如下:
data on procs0: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0]
data on procs1: [0, 0, 0, 4, 5, 6, 0, 0, 0, 0, 0, 0]
data on procs2: [0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0]
data on procs3: [0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12]
我想使用mpi4py库中的reduce函数来减少procs0上的数据,结果是:
^{pr2}$如何使用mpi4py lib函数来实现它?在
编辑时间: 以上是一个简单的特例,不能使用集合,请看下面的另一个例子:
data on procs0: [1,0,0,0,0,0]
data on procs1: [0,2,0,0,0,0]
data on procs2: [0,0,0,3,0,0]
data on procs3: [0,0,0,0,4,5]
理想的结果必须是:
result on procs0: [1,2,0,3,4,5]
从你的问题中我不确定你想要的是数据的总和还是最大值,我用mpi
Reduce
函数写了一个简单的例子,它计算总和。在将此代码保存在文件
^{pr2}$reduce_test.py
中并使用命令mpirun -np 3 ./reduce_test.py
运行它,在我的机器上得到以下输出:请注意,将调用
comm.Reduce
中的参数op = MPI.SUM
更改为op = MPI.MAX
将计算最大值,而不是求和。在将list comprehension与zip一起使用,存储每个列的最大值
相关问题 更多 >
编程相关推荐