2011-03-01 32 views
8

所以我們可以說我有2個進程,等級0和等級1MPI_Recv - 如何確定計數?

int i[20], j[20], temp, size; 

在過程與等級0 MPI程序,我有

for(temp=0; temp<20; temp++) 
    i[temp] = temp; 
MPI_Send(i, 15, MPI_INT, 1, 1, MPI_COMM_WORLD); 

和假設的過程與當時排名1

// At this point, size is declared, but not assigned any value. 
MPI_Recv(j,size, MPI_INT, 0, 1, MPI_COMM_WORLD): 
cout << "I have received " << size << " elements" ; 

我的問題是,在上面的語句中,是否需要聲明「大小」?或者MPI_Recv以某種方式「知道」它正在接收15個元素,並自動設置size = 15?如果大小沒有定義,代碼會發生什麼?

基本上,我的問題是,我發送不同級別的處理器的不同數量的元素,所有的消息源自0級。我想知道是否應該先發送大小,然後準備處理器接收到許多元素,或者如果我可以發送數組,並且進程自動從那裏選擇大小。

回答

14

看那文檔MPI_Recv

輸入參數

計數中元素的最大數量的接收緩衝區(整數)

所以,是的,你確實需要傳遞一個價值。請注意,它不一定是您接收的元素的實際數量,而只是您的緩衝區可容納的元素的最大數量。在你的情況,你只需要通過20 注意節還提到如何確定收到的元素的實際數量:

count參數表示消息的最大長度;實際數量可以用MPI_Get_count來確定。