2010-02-25 74 views
4

現在我正在嘗試使用MPI_Sendand MPI_Recv在多個進程中傳遞最佳找到的解決方案。在每個流程中找到的最佳解決方案都應該傳遞給控制流程,該流程存儲所有最佳解決方案,並在需要時發送給其他流程。我的問題是如何實現它?例如,一旦進程1找到新的最好的,它可以調用MPI_Send並將其發送給控制進程。控制過程是否有辦法檢測到有消息要接收?每個MPI_Send是否需要MPI_Recv?期待聽到你們專家的建議。謝謝!MPI實現:MPI_Recv是否可以接收來自多個MPI_Send的消息?

感謝您的建議。我想要做的是讓幾個工作進程向一個控制進程發送消息。工作流程決定何時發送。控制過程必須檢測何時接收。 MPI_Proble可以做到嗎?

回答

11

是的,MPI_RECV可以指定MPI_ANY_SOURCE作爲消息來源的等級,所以你應該可以做你想做的。

5

MPI_Recv可以使用MPI_ANY_SOURCE作爲從任何其他級別接收消息的方式。

根據控制過程的工作負載和性質,您可能希望保留對代碼的控制權,並且只能隨時進入MPI庫。在這種情況下,MPI_ANY_SOURCE和MPI_Test上的MPI_IRecv可能是一個好方法。

如果您需要根據消息內容進行一些處理,MPI_Probe或MPI_IProbe允許在消息實際上是MPI_Recv'd之前檢查消息頭。例如,MPI_Probe允許確定消息的大小,並創建適當大小的緩衝區。另外,如果在檢查最佳解決方案時所有工作隊伍偶爾會達到「障礙」點,MPI_Gather/MPI_Bcast集體操作也可能是適當的。

請記住,進入長計算階段的等級有時會干擾良好的消息傳播。如果有一個擴展的計算階段,確保所有MPI消息在該階段之前已經交付可能會有所幫助。這變得更加重要,因爲在羣集中使用了RDMA風格的互連。 MPI_Barrier將確保所有等級在MPI_Barrier調用返回任何MPI等級之前進入MPI_Barrier。