【发布时间】:2016-10-29 12:10:08
【问题描述】:
我正在尝试使用 mpi4py 执行此代码:
from mpi4py import MPI
import numpy
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
inp = numpy.random.rand(size)
senddata = inp[rank]
recvdata=comm.reduce(senddata,None,root=0,op=MPI.MINLOC)
print 'on task',rank,'reduce: ',senddata,recvdata
recvdata=comm.allreduce(senddata,None,op=MPI.MINLOC)
print 'on task',rank,'allreduce: ',senddata,recvdata
使用这个命令:
$ mpirun -np 4 python ./reduce_minlock.py
但我收到的不是预期的结果:
Traceback (most recent call last):
Traceback (most recent call last):
File "./reduce_minlock.py", line 11, in <module>
Traceback (most recent call last):
File "./reduce_minlock.py", line 11, in <module>
recvdata=comm.reduce(senddata,None,root=0,op=MPI.MINLOC)
File "MPI/Comm.pyx", line 1298, in mpi4py.MPI.Comm.reduce (src/mpi4py.MPI.c:109386)
TypeError: reduce() got multiple values for keyword argument 'op'
recvdata=comm.reduce(senddata,None,root=0,op=MPI.MINLOC)
File "MPI/Comm.pyx", line 1298, in mpi4py.MPI.Comm.reduce (src/mpi4py.MPI.c:109386)
TypeError: reduce() got multiple values for keyword argument 'op'
Traceback (most recent call last):
File "./reduce_minlock.py", line 11, in <module>
recvdata=comm.reduce(senddata,None,root=0,op=MPI.MINLOC)
File "MPI/Comm.pyx", line 1298, in mpi4py.MPI.Comm.reduce (src/mpi4py.MPI.c:109386)
TypeError: reduce() got multiple values for keyword argument 'op'
File "./reduce_minlock.py", line 11, in <module>
recvdata=comm.reduce(senddata,None,root=0,op=MPI.MINLOC)
File "MPI/Comm.pyx", line 1298, in mpi4py.MPI.Comm.reduce (src/mpi4py.MPI.c:109386)
TypeError: reduce() got multiple values for keyword argument 'op'
我从这个Tutorial 得到这个代码。我不明白为什么当我使用确切数量的参数时会出现类型错误。我想知道 mpi4py 是否支持 MPI.MINLOC。我没有在文档中找到有关此操作的任何警告。这些是我的系统配置:
$ mpirun --version
mpirun (Open MPI) 1.10.3
Report bugs to http://www.open-mpi.org/community/help/
$ python --version
Python 2.7.12
$ cat /etc/fedora-release
Fedora release 24 (Twenty Four)
有什么帮助吗?
【问题讨论】: