いくつかの問題があります。単純な MPI_Send/MPI_Recv プログラムでは、送信しようとしているメッセージのタイプを知っていると想定されていますが、受信側では、受信するデータのタイプがわかりません。
だから私は次のように最初の試みを試みます:
#include "mpi.h"
#include <stdlib.h>
#include <stdio.h>
int main(int args, char** argv){
int rank, size;
MPI_Status status;
MPI_Init(&args,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
if(rank==0){
int x = 10;
MPI_Send(&x,4,MPI_BYTE,1,0,MPI_COMM_WORLD);
}
if(rank==1){
void* datax;
int count = sizeof(int);
datax = malloc(count);
MPI_Recv(datax,count,MPI_BYTE,0,0,MPI_COMM_WORLD,&status);
//Now check if the value is received correctly
int z = (int) datax;
printf("RCV: %d \n",z);
}
MPI_Finalize();
return 0;
}
プログラムは正しくコンパイルされ、実行されますが、受信した値は正しい値 (この場合は 10) ではなく、メモリのガベージ値です。
何か提案はありますか?
ありがとう、