この単純な MPI プログラムを 2 つのプロセッサで実行しています。私の例(または私のコンピューター上だけかもしれません)では、コンソールは送信メッセージの前に受信メッセージを出力しました。
MPI を使用して受信を順序付けする方法があることは知っていますが、私の例ではプロセッサ 0 がデータを送信するのを待つので、受信出力は必然的に秒単位になります。
送信メッセージの後に受信メッセージを印刷するにはどうすればよいですか?
これは私のコードです:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mpi.h>
int main(int argc, char *argv[]){
int np, myId;
char send[100], recv[100];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &np);
MPI_Comm_rank(MPI_COMM_WORLD, &myId);
MPI_Status stat;
if(myId == 0){
int length = sprintf(send, "hey!");
for(int i = 1; i < np; i++){
printf("send %d => %d (%d)", myId, i, length);
MPI_Send(send, length, MPI_CHAR, i, 0, MPI_COMM_WORLD);
}
}else if (myId == 1){
MPI_Recv(send, 41, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &stat);
printf("receive %d <= %d\n", myId, 0);
}
MPI_Finalize();
return 0;
}