0
如果我聲明一個MPI_Request表(每個CPU有一個請求),它將在MPI_Isend/MPI_Irecv使用時全局訪問(與初始化MPI環境後無處不在的MPI_comm相比)MPI處理器中MPI_Request是否全局?
謝謝。
如果我聲明一個MPI_Request表(每個CPU有一個請求),它將在MPI_Isend/MPI_Irecv使用時全局訪問(與初始化MPI環境後無處不在的MPI_comm相比)MPI處理器中MPI_Request是否全局?
謝謝。
我覺得這個問題有點混亂,也許你可以澄清。 MPI_Request
是一種類型;如果您在一個進程中聲明瞭此類型的值的表,那麼它僅對該進程可用,與任何其他已聲明的變量一致。通常用作類型MPI_REQUEST的
數據處理立即發送和接收(ISend
,Irecv
),以允許發送和接收過程以測試該消息已被接收,使用MPI_Test
或MPI_Wait
/MPI_Waitall
/MPI_Waitany
。
MPI_Comm
也是一種類型,但也許你的意思是這種類型的默認溝通者本身?這是所有進程都知道的,因爲MPI_Init
(有效地)創建默認通信器是一個集體操作。
謝謝你的回答,我問這個問題,因爲MPI_Isend和MPI_Irecv把MPI_Request類型作爲參數。假設每個CPU都在其世界中並且MPI_Request類型不共享,他們如何知道請求與特定的MPI_Isend和MPI_Irecv匹配? – Debugger 2010-05-28 19:21:52
匹配由「source」和「tag」參數的值完成,就像阻塞發送/接收一樣。如果進程'i'發送一個帶有目標'j'和標籤'n'的發送,那麼進程'j'將接收到IFF它發送一個帶有源'i'和標籤'n'(或'MPI_ANY_TAG')的接收。 MPI實現負責在消息傳遞後更新兩個進程中'MPI_Request'對象的狀態。 – suszterpatt 2010-05-28 22:42:15