请参阅以下收集代码:
from mpi4py import MPI
comm = MPI.COMM.WORLD
size = comm.Get_size()
rank = comm.Get_rank()
stat = MPI.Status()
message = (rank)**2
print "Before Gather ",rank, message
message = comm.gather(message, root=0)
if rank == 0:
print "After Gather ",rank,message
如何使用 comm.barrier()功能确保“After”步骤始终在所有“Before”步骤之后?
如果我在条件之前放入comm.barrier(),结果将按任何顺序排列。
我已经尝试了冲洗它并没有工作。
我应该使用Gather指定发送缓冲区和接收缓冲区吗?
或者,我应该尝试将所有内容收集到一个进程,然后分散,然后再次聚集?
任何建议都非常受欢迎和赞赏。
答案 0 :(得分:0)
基本上,你不能。
来自每个MPI任务的 stdout
收集,然后由mpirun
打印,并且没有强制执行任何类型的全局订单的机制。
唯一的保证是Before Gather 0 ...
After Gather 0 ...