0

以下のピンポンプログラムでは、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 ();
}
4

1 に答える 1

0

MPI_Get_countリンクされたページのさらに下にある「出力」セクションのドキュメントで、少し答えています。

についてrcは、このコードの作成者や関連するメモにアクセスすることなく提供できる最良の説明を次に示します。C バインディングのすべての MPI ルーチンはエラー コードを返します。一部のコンパイラは、コード内のエラーを示している可能性があるため、フロアに戻り値をドロップしているかどうかをチェックし、それが発生した場合に警告を生成します。したがって、これらの警告が表示されないようにするために、このコードは戻り値を変数に割り当てますrc

とはいえ、多くのコンパイラは、一度も使用されていない変数を設定することについても警告します。コンパイラに「はい、この戻り値を無視していることはわかっているので、放っておいてください」と伝えるイディオムは(void)function_call(foo, bar, baz);(つまり、戻り値を にキャストするvoid) です。これは、 のように戻り値を実際にチェックする必要がある関数の呼び出しで最もよく見られますwrite()。問題のある警告を黙らせるのではなく、すべての MPI 呼び出しでそれを書くのはかなり醜いでしょう。

于 2012-04-20T18:50:56.743 に答える