0
我有這個簡單的MPI程序運行在兩個處理器上。在我的示例中(或者可能只是在我的電腦上),我的控制檯在發送消息之前輸出接收消息。簡單的消息交換使用MPI
我知道有一種使用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;
}
您是否嘗試睡眠接收消息或fflush(stdout)的進程? –
就像在MPI_Recv之前放置一個fflush(發送)一樣? –
'fflush(send)'沒有意義......'send'不是輸出緩衝區。 – Mosby