我這個今天碰上了(http://www.mcs.anl.gov/research/projects/mpi/www/www3/MPI_Send.html)零MPI計數往往是有效
MPI_ERR_COUNT
Invalid count argument. Count arguments must be non-negative; a count of zero is often valid.
是什麼意思由零計數往往有效嗎?這是否意味着它取決於實施?
我這個今天碰上了(http://www.mcs.anl.gov/research/projects/mpi/www/www3/MPI_Send.html)零MPI計數往往是有效
MPI_ERR_COUNT
Invalid count argument. Count arguments must be non-negative; a count of zero is often valid.
是什麼意思由零計數往往有效嗎?這是否意味着它取決於實施?
我認爲你讀太多了進去。我認爲它只是意味着取決於用戶執行,任何從0隨機正整數是一個有效的計數。不難想象不需要參數的消息標籤。
如果消息標籤不需要參數,那麼它是有效的只發送零(和,事實上,可能是無效的發送不止於此)。你必須記住,沒有參數與沒有數據是不一樣的,因爲消息標籤是其中的一個「參數」。
這意味着,在該MPI需要將指定的消息數據大小的任何函數接受零但是,這並不意味着它會導致正確的應用程序代碼。
例如,MPI_Send
接受0作爲計數,並將始終發送一個空消息,該消息不包含任何數據但仍具有信封並且可以通過匹配MPI_Recv
接收。在另一方面,如果你作爲計數在MPI_Recv
,你會得到一個消息,截斷誤差爲已到達任何匹配的非空消息指定爲0。即0對於MPI_Recv
幾乎從來都不是有效的(從應用角度來看)計數值,儘管MPI完全可以接受。
零被廣泛接受,在MPI,因爲這使得能夠更寫對稱碼(例如,沒有大量的if (count != 0) ...
我不知道,我懂'symmetric'碼的說法。有時從郵件信封中的信息是所有你需要(以syncrhonize例如兩個過程)。 – mgilson
對稱意味着代碼中沒有'if'-s,因此它更易於閱讀和理解。另一個例子是使用'MPI_PROC_NULL'來防止非週期性笛卡爾拓撲中的邊界處理中的秩特定邏輯,例如, 「如果我不是最高等級,則發送消息給等級+1」或「如果我不是等級0,則接收等級爲1的消息」。 –
1代碼。總之,即使沒有有效載荷時,這一事實本身是接收到的消息可以是足夠的信息,例如表示已經達到某個執行點 – suszterpatt
但爲什麼不說零計數總是有效?(我同意沒有有效載荷的消息是有用的) – mgilson
你是對的零始終是有效的我已經看過標準(MPI 2.2標準的第3.2.2節) – mgilson