2013-07-10 23 views
3

我想了解爲什麼我應該使用MPI_Wait來等待MPI請求來完成?爲什麼在MPI_Send中使用MPI_Wait?

因此,在MPI_Send作用域的末尾,我會使用MPI_Wait方法,但是爲什麼? 在我的理解MPI_Send只是發送一條消息,並沒有等待一個請求來完成,但是MPI_ISend做到了 !

謝謝。

+3

情況正好相反:'MPI_Wait'和其他類似的函數用於等待並確保像MPI_Isend這樣的異步操作完成。 'MPI_Send'是一個阻塞調用 - 它在操作完成之前不會返回控制權。 –

回答

2

總結什麼@Hristo Iliev說,你不應該(並不能)撥打MPI_WAIT呼叫MPI_SEND。調用MPI_WAIT要求您傳遞一個MPI_Request對象,該對象將作爲MPI_I<something>函數的返回值。如果沒有這個目標,MPI不知道你在等什麼。

所以你的推理到底是正確的。你不等MPI_SEND,但你(並且必須)等待MPI_ISEND

+0

謝謝。但是,我應該在MPI_Send請求中等待什麼?我應該等待MPI_Recv發送一個MPI_Status嗎? – user2069668

+1

您不等待MPI_Send請求。一旦MPI_Send調用返回,它就完成了發送過程的目的。在將來的某個時候,接收過程將通過適當的呼叫接收。 –