2012-04-20 104 views
0

乒乓程序下面,rc變量有什麼用?它不斷更新,但從未使用過。
再加上MPI_Get_Count()是做什麼的?MPI'rc'變量和MPI_Get_Count變量的原因()


#include "mpi.h" 
#include <stdio.h> 

int main(int argc, char * argv []) 

int numtasks, rank, dest, source, rc, count, tag=1; 
char inmsg, outmsg; 
MPI_Status Stat ; 

MPI_Init (&argc,&argv); 
MPI_Comm_size (MPI_COMM_WORLD, &numtasks); 
MPI_Comm_rank (MPI_COMM_WORLD, &rank); 

if (rank == 0) { 
    dest = source = 1;outmsg=’x’; 
    rc = MPI_Send (&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD); 
    rc = MPI_Recv (&inmsg, 1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat); 
} 
else if (rank == 1) { 
    dest = source = 0;outmsg=’y’; 
    rc = MPI_Recv (&inmsg, 1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat); 
    rc = MPI_Send (&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD); 
} 

rc = MPI_Get_count (&Stat, MPI_CHAR, &count); 
printf("Task %d: Received %d char(s) from task %d with tag %d \n", rank, count, Stat.MPI_SOURCE,Stat.MPI_TAG); 
MPI_Finalize(); 
} 
+0

如果你的Google「MPI_Get_count」,第一個結果回答你的問題。 – suszterpatt 2012-04-20 15:16:15

+0

[this](http://www.mcs.anl.gov/research/projects/mpi/www/www3/MPI_Get_count.html)? '獲取「頂級」元素的數量?那麼和「尺寸」不一樣嗎? – 2012-04-20 15:18:33

+0

我的意思是'MPI_Comm_size()' – 2012-04-20 16:10:04

回答

0

位約MPI_Get_count通過的「輸出」部分中的文檔回答,並進一步降低該鏈接的頁面。

至於rc,以下是我可以提供的最佳解釋,無法訪問此代碼的作者或任何相關說明。 C綁定中的所有MPI例程都返回一個錯誤代碼。一些編譯器會檢查是否在地板上放置返回值,因爲它可能表示代碼中有錯誤,並在發生這種情況時會產生警告。因此,爲了防止出現這些警告,此代碼將返回值分配給變量rc

也就是說,許多編譯器還警告設置一個從未使用過的變量,在這裏就是這種情況。告訴編譯器「是的,我知道我忽略了這個返回值,讓我獨自一人」的成語是(void)function_call(foo, bar, baz);(即將返回值轉換爲void)。這在調用返回值真的應該被檢查的函數中最常見,如write()。把它寫在每個MPI調用上而不是沉默一個違規的警告將是相當難看的。

+0

感謝你,但關於'MPI_Get_count()',文檔沒有讓我在那裏(注意'homework'標籤)。 'MPI_Get_count()'和'MPI_Comm_size()'有什麼區別? – 2012-04-20 19:17:37

+0

完整閱讀文檔頁面。看看這個函數的參數,以及它們來自哪裏。此功能根本不處理通信器,但是具有來自接收呼叫的狀態。 – Novelocrat 2012-04-21 18:57:11