<p>从你的问题中我不确定你想要的是数据的总和还是最大值,我用mpi <code>Reduce</code>函数写了一个简单的例子,它计算总和。在</p>
<pre><code>#!/usr/bin/env python
import numpy as np
from mpi4py import MPI
comm = MPI.COMM_WORLD
comm.Barrier()
t_start = MPI.Wtime()
# this array lives on each processor
data = np.zeros(5)
for i in xrange(comm.rank, len(data), comm.size):
# set data in each array that is different for each processor
data[i] = i
# print out the data arrays for each processor
print '[%i]'%comm.rank, data
comm.Barrier()
# the 'totals' array will hold the sum of each 'data' array
if comm.rank==0:
# only processor 0 will actually get the data
totals = np.zeros_like(data)
else:
totals = None
# use MPI to get the totals
comm.Reduce(
[data, MPI.DOUBLE],
[totals, MPI.DOUBLE],
op = MPI.SUM,
root = 0
)
# print out the 'totals'
# only processor 0 actually has the data
print '[%i]'%comm.rank, totals
comm.Barrier()
t_diff = MPI.Wtime() - t_start
if comm.rank==0: print t_diff
</code></pre>
<p>将此代码保存在文件<code>reduce_test.py</code>中并使用命令<code>mpirun -np 3 ./reduce_test.py</code>运行它,在我的机器上得到以下输出:</p>
^{pr2}$
<p>请注意,将调用<code>comm.Reduce</code>中的参数<code>op = MPI.SUM</code>更改为<code>op = MPI.MAX</code>将计算最大值,而不是求和。在</p>