我編寫以下代碼AllGather()實驗:爲什麼AllGather()在具有不同迭代值的循環中失敗?
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
a = None
if rank == 0:
a = 2
if rank == 1:
a = 3
z = 2
for i in range(0, a):
z = comm.allgather(z)
print(z, rank)
comm.barrier()
我運行它,如下所示:
程序mpiexec -n 2 python3 allgather.py
我得到以下輸出:
[[2,2],[2,2]] 0
第二個處理器卡住了,程序沒有終止。
輸出應爲:
[[2,2],[2,2]] 0
[[2,2],[2,2],[2,2 ]] 1
我不明白爲什麼第二個處理器卡住了。如果我在兩個處理器中設置了= 2 ,它會正確運行。我究竟做錯了什麼?
啊,我現在看到了!我也試過z = comm.gather(z,root = rank),但也失敗了。有關於此的任何想法? – SpiderRico
「收集」功能只是將所有進程中的數據收集在一箇中,這意味着您仍然必須發送每個進程中的數據,但只有一個收件人。我知道,命名有點混亂。可悲的是,mpi4py並不完全具有良好的文檔,請看看:http://mpi4py.readthedocs.io/en/stable/overview.html 如果你想找的東西沒有記錄在那裏,請看看MPI的C-API。 – H2O