0
請參考下面的收集代碼:如何打印「之前收集」之前「後集」在MPI蟒蛇mpi4py
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()功能,保證的「之後」步驟總是在「之前」步驟之後出現?
如果在條件之前放置comm.barrier(),結果將以任意順序排列。
我試過沖洗,它不起作用。
我應該使用Gather指定發送緩衝區和接收緩衝區嗎?
或者,我應該嘗試將所有內容收集到一個進程中,然後分散,然後再次收集?
任何建議是不是歡迎和讚賞。
打印是的,這就是我想要的,以「後集」之前打印「前集」。事實上,結果總是以隨機順序出現,儘管我在收集之前放置了comm.barrier()。即使sys.stdout.flush()在這裏也不起作用。我想知道打印不會產生stdout ......或者可能。非常感謝你的回覆。 – Jeslll07
好吧,就像我說的那樣,不能保證'n> 0''在Gater n ...之前''會在輸出中的'收集0之前'結束。如果你確實需要這種行爲,你不能依賴'stdout'。如果這只是爲了調試的目的,並且你希望某些工作在大多數時間*,你可以在MPI_Gather()之前或之後足夠長的時間flush()'**和**'sleep()' –
好吧,我現在明白了。謝謝,吉爾斯。 – Jeslll07