2012-02-03 116 views
2

閱讀關於在MPI中阻塞發送和接收時,我感到困惑。如在MPI標準2.2,3.4節通信模式表示:MPI阻塞接收語義

...在最後一節中所描述的接收操作是阻塞:接收緩衝器包含新接收的消息 它 僅返回之後。 接收可以在匹配發送完成之前完成 (當然,只有在匹配發送開始後它才能完成)。

誰能向我解釋如何阻塞收到相應的發送已完成才能完成?我的理解是,當數據準備用於接收緩衝區時(即數據已完全接收),阻塞接收(MPI_recv)會返回。這不是這種情況嗎?

回答

5

你的理解是正確的。

標準中描述的情況(接收完成之前發送完成)告訴你不要依賴庫調用的順序。在特定的機器/實施中不一定需要這種情況。

如果您考慮同步發送和阻止接收微小消息。同步發送只能在匹配接收開始後完成,可能由'確認消息(ACK)'指示。在ACK到達發送者之前,實際的消息傳送可能會完全傳送(接收可能會返回)(發送可能會返回)。請記住這是高度實現/機器特定的。

1

有人可以向我解釋在相應的發送完成之前,阻止接收可以如何完成,然後 ?

「發送完成」的定義是用戶代碼可以安全地更改發送緩衝區的內容。不保證相應recv的狀態。

在某些情況下,recv必須在發送緩衝區安全更改之前完成(並返回)。例如,ack必須從recv端發送到發送端,以表明修改發送緩衝區是安全的(在RDMA集合協議消息傳輸中是常見的)。

我理解的是一個 阻斷接收(MPI_RECV)返回時數據是準備在 要使用的接收緩衝器(即,數據已被完全接收)。這是不是 ?

這是正確的。