2011-01-26 108 views
5

我正在編寫一個程序來檢查使用MPI庫的最短路徑。 有兩種情況:
要麼我找到了更好的路徑,如果緩衝區的第一個插槽的狀態爲resultBuff[0] = 1,我需要檢查緩衝區的其餘內容以獲得更好的路徑。
另一種情況是resultBuff[0] = 0,我不會在緩衝區的其他單元中刪除任何值。MPI_Recv:接收的尺寸不同於發送的尺寸

是否有可能對我來說,使用單獨的MPI_Isend電話:

在情況下,我找到了一個更好的路徑,並將其存儲在resultBuff[1]resultBuff[10]

MPI_Isend((void*)sendBuff, 11, MPI_INT, 0, 1, MPI_COMM_WORLD, &request); 

如果沒有找到更好的路徑:

MPI_Isend((void*)sendBuff, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &request); 

而在這兩種情況下,我將使用

MPI_Recv((void*)resultBuff, 11, MPI_INT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &status); 

接收結果。

這項工作?
如果是這樣,如果不發送更好的路徑,我會節省通信費用嗎?

注:resultBuff是尺寸爲11

回答

1

是的,你可以做到這一點。根據MPI標準和man pages(對於MPI_Recv),「count參數指示消息的最大長度;實際數量可以用MPI_Get_count」確定,您可以使用從MPI_Recv()返回的status對象調用該參數。對於節約通信成本,它可能不會 - 這樣的短消息主要由發送消息的延遲而不是帶寬來決定。

0

你並不需要發送一個消息說的:「我什麼也沒發現」:在缺乏消息可以傳達的信息一樣好。接收者可以定期調用MPI_Test,並檢查狀態對象以查看是否收到新消息。

+1

這並沒有回答這個問題,它只是圍繞它而已。 – Nayish 2011-01-26 11:58:39