【问题标题】:how to print "before gather" before "after gather" in mpi python mpi4py如何在mpi python mpi4py中的“收集后”之前打印“收集前”
【发布时间】:2018-03-27 09:04:18
【问题描述】:

参考以下收集代码:

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() 放在 if 条件之前,结果将按任意顺序排列。

我试过冲洗,但它不起作用。

我应该使用 Gather 指定发送缓冲区和接收缓冲区吗?

或者,我应该尝试将所有内容收集到一个进程中,然后分散,然后再次收集?

欢迎和赞赏任何建议。

【问题讨论】:

    标签: python mpi stdout hpc mpi4py


    【解决方案1】:

    基本上,你不能。

    来自每个 MPI 任务的stdout收集,然后由mpirun 打印,并且没有强制执行任何类型的全局顺序的机制。

    唯一的保证是Before Gather 0 ...总是在After Gather 0 ...之前打印

    【讨论】:

    • 是的,这就是我想要的,在“收集后”之前打印“收集前”。实际上,结果总是以随机顺序出现,尽管我在收集之前放了一个 comm.barrier() 。甚至 sys.stdout.flush() 在这里也不起作用。我想知道也许 print 不会产生标准输出……或者是的。非常感谢您的回复。
    • 好吧,就像我说的,不能保证 n > 0 Before Gater n ... 会在你的输出中出现在 After Gather 0 之前。如果您确实需要此行为,则不能依赖 stdout。如果这只是为了调试目的并且您想要大部分时间都可以工作的东西,您可以flush() sleep() 在@987654331 之前或之后足够长的时间@
    • 好的,我现在明白了。谢谢,吉尔斯。
    猜你喜欢
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 2015-09-12
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多