私は、3回の繰り返しでロジックサークルを構築し、その結果を出力する単純なアプリケーションを構築しています。まず、プロセス0からのBlock SendとRecvを使用しています。SendとRecvを使用しています。最後のn-1プロセスまでは、プロセス0に送信されます。プロセス0では、このコードがメインにあります。MPI - ロジックサークルサークル
int i;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
MPI_Comm_rank(MPI_COMM_WORLD;&myrank);
if(myrank==0){
for(i=0;i<3;i++){
MPI_Send(msg,MPI_CHAR,myrank+1,99,MPI_COMM_WORLD);
MPI_Recv(msg,100,MPI_CHAR, numtasks-1,99,MPI_COMM_WORLD,&status);
printf("hello");
}
}
else if(myrank==(numtasks-1)){
MPI_Recv(msg,100,MPI_CHAR,numtasks-2,99,MPI_COMM_WORLD,&status);
MPI_Send(msg,100,MPI_CHAR,0,99,MPI_COMM_WORLD);
}
else{
MPI_Recv(msg,100,MPI_CHAR,myrank-1,99,MPI_COMM_WORLD,&status);
MPI_Send(msg,100,MPI_CHAR,myrank+1,99,MPI_COMM_WORLD);
}
私は今3つの結果を得ようとしています、私は正しいですか?しかし、まだ私は1つしか得ていません。残りのコードはシンプルで、0以外のプロセスでは、myrank-1(myrankは実際のプロセスの番号)から受信し、rank + 1に送信します...まだ私はそれを取得しません。
+1私をビートしてください。 (私はブロックする方法のあなたの応答を修正しました。) – chrisaycock
@chrisaycock:ああ; 'MPI_Waitall'はよく知られているようです。 :-) +1。 –
最初のプロセスはMPI_Sendで始まり、他はMPI_Recvで始まりMPI_Sendで続行します。そしてそれは私にとって奇妙なことです。たとえそれが3回行っても、それは一度だけ、その後は何もしません。 – Waypoint