2012-05-01 44 views

回答

9

我認爲你讀太多了進去。我認爲它只是意味着取決於用戶執行,任何從0隨機正整數是一個有效的計數。不難想象不需要參數的消息標籤。

如果消息標籤不需要參數,那麼它是有效的只發送零(和,事實上,可能是無效的發送不止於此)。你必須記住,沒有參數與沒有數據是不一樣的,因爲消息標籤是其中的一個「參數」。

+0

1代碼。總之,即使沒有有效載荷時,這一事實本身是接收到的消息可以是足夠的信息,例如表示已經達到某個執行點 – suszterpatt

+0

但爲什麼不說零計數總是有效?(我同意沒有有效載荷的消息是有用的) – mgilson

+2

你是對的零始終是有效的我已經看過標準(MPI 2.2標準的第3.2.2節) – mgilson

5

這意味着,在該MPI需要將指定的消息數據大小的任何函數接受零但是,這並不意味着它會導致正確的應用程序代碼。

例如,MPI_Send接受0作爲計數,並將始終發送一個空消息,該消息不包含任何數據但仍具有信封並且可以通過匹配MPI_Recv接收。在另一方面,如果你作爲計數在MPI_Recv,你會得到一個消息,截斷誤差爲已到達任何匹配的非空消息指定爲0。即0對於MPI_Recv幾乎從來都不是有效的(從應用角度來看)計數值,儘管MPI完全可以接受。

零被廣泛接受,在MPI,因爲這使得能夠更寫對稱碼(例如,沒有大量的if (count != 0) ...

+0

我不知道,我懂'symmetric'碼的說法。有時從郵件信封中的信息是所有你需要(以syncrhonize例如兩個過程)。 – mgilson

+1

對稱意味着代碼中沒有'if'-s,因此它更易於閱讀和理解。另一個例子是使用'MPI_PROC_NULL'來防止非週期性笛卡爾拓撲中的邊界處理中的秩特定邏輯,例如, 「如果我不是最高等級,則發送消息給等級+1」或「如果我不是等級0,則接收等級爲1的消息」。 –