我正在使用mpi4py版本3.0.1a0运行以下Python脚本:

from mpi4py import MPI

comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()


print 'INIT',rank,size
comm.Barrier()
if rank==0:
    bla=4
else:
    bla=None
print 'BEFORE',rank,bla
comm.Barrier()
print 'AFTER',rank,bla


并通过mpiexec -n 16 python test_run.py提交给集群。似乎一切正常,因为我没有收到任何错误,但是,它没有达到我的期望,这意味着它无法识别障碍:

INIT 1 16
BEFORE 1 None
AFTER 1 None
INIT 2 16
BEFORE 2 None
AFTER 2 None
INIT 3 16
BEFORE 3 None
AFTER 3 None
INIT 4 16
BEFORE 4 None
AFTER 4 None
INIT 5 16
BEFORE 5 None
AFTER 5 None
INIT 6 16
BEFORE 6 None
AFTER 6 None
INIT 7 16
BEFORE 7 None
AFTER 7 None
INIT 8 16
BEFORE 8 None
AFTER 8 None
INIT 9 16
BEFORE 9 None
AFTER 9 None
INIT 10 16
BEFORE 10 None
AFTER 10 None
INIT 11 16
BEFORE 11 None
AFTER 11 None
INIT 12 16
BEFORE 12 None
AFTER 12 None
INIT 13 16
BEFORE 13 None
AFTER 13 None
INIT 14 16
BEFORE 14 None
AFTER 14 None
INIT 15 16
BEFORE 15 None
AFTER 15 None
INIT 0 16
BEFORE 0 4
AFTER 0 4


我也尝试添加comm.bcast(bla,root=0),但这也没有做任何事情。为什么mpi4py无法执行这些任务?

最佳答案

问题出在MPI。使用mopish/3.1.4/intel代替openmpi并重新编译mpi4py可以正常工作,因此这似乎是与平台/基础结构有关的问题。

关于python - 如何使用mpi4py同步内核?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48999637/

10-14 03:59