私はこのコードについて少し混乱しています。まず、MPIでポインタを送信しないようにアドバイスする多くの投稿を読みました。しかし、私はここに1つ送っていて、それは機能しています。このコードで私が抱えているもう1つの問題は、他のプロセスから最大4文字を書き込んで、コードのように0に割り当てられたメモリを処理できることです。誰かが少し説明できますか?
#include<mpi.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
int MyRank, NumProcs, index, ret;
MPI_Status status;
MPI_File cFile;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&MyRank);
MPI_Comm_size(MPI_COMM_WORLD,&NumProcs);
//Allocated memory for a double pointer.
char **var;
MPI_Alloc_mem(sizeof(char *)*NumProcs, MPI_INFO_NULL, &var);
for(index = 0; index < NumProcs; index++)
MPI_Alloc_mem(sizeof(char)*50, MPI_INFO_NULL, &var[index]);
if(MyRank == 0)
{
//Copied data to the 0th position of the double pointer
strcpy(var[MyRank],"KKKKKK");
//Process 0 sent the array to other process to overwrite the data
for(index = 1; index < NumProcs; index++)
MPI_Send(var[index],1,MPI_INT,index,1,MPI_COMM_WORLD );
for(index = 1; index < NumProcs; index++)
MPI_Recv(var[index],1,MPI_INT,index,1,MPI_COMM_WORLD,&status);
}
else
{
//Overwrite of data is done.
MPI_Recv(var[MyRank],1,MPI_INT,0,1,MPI_COMM_WORLD,&status);
strcpy(var[MyRank],"MMMMMM");
MPI_Send(var[MyRank],1,MPI_INT,0,1,MPI_COMM_WORLD );
}
if(MyRank == 0)
{
//After writing data, printed in process 0;
printf("My Rank is -%d\n", MyRank);
for(index = 0; index < NumProcs; index++)
printf(" %s\n",var[index]);
}
MPI_Finalize();
return 0;
}