Mpi 无法在进程0中从其他进程分配的内存中写入超过4个字符

Mpi 无法在进程0中从其他进程分配的内存中写入超过4个字符,mpi,Mpi,我对这段代码有点困惑。第一件事是我读过很多帖子,建议不要在MPI中发送指针。但我正在发送一个,它正在工作。这段代码的另一个问题是,它最多可以从其他进程向进程0的分配内存写入4个字符,如代码中所示。有人能解释一下吗 #包括 #包括 #包括 #包括 int main(int argc,char*argv[]) { int MyRank,NumProcs,index,ret; MPI_状态; MPI_文件cFile; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_C

我对这段代码有点困惑。第一件事是我读过很多帖子,建议不要在MPI中发送指针。但我正在发送一个,它正在工作。这段代码的另一个问题是,它最多可以从其他进程向进程0的分配内存写入4个字符,如代码中所示。有人能解释一下吗

#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
int MyRank,NumProcs,index,ret;
MPI_状态;
MPI_文件cFile;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_Comm_WORLD和MyRank);
MPI通信大小(MPI通信世界和NumProcs);
//为双指针分配的内存。
字符**var;
MPI_Alloc_mem(sizeof(char*)*NumProcs、MPI_INFO_NULL和var);
对于(索引=0;索引
当你说
MPI\u Send(变量[index],1,MPI\u INT,index,1,MPI\u COMM\u WORLD)告诉编译器发送1个整数。在32位系统上,这仅为4个字节

您可能希望更改所有发送和接收行,使其具有与MPI_发送相同的参数(var[index],50,MPI_CHAR,index,1,MPI_COMM_WORLD)


为了澄清您对发送指针的误解:MPI实际上并不“发送指针”。上面的代码将从
var[index]
指向的
char
开始,并发送该
char
和下一个49
char

如果您在连续内存块中分配所有
numproc
字符串,您可以使用
MPI\u分散
MPI\u聚集
而不是使用
MPI\u发送
MPI\u接收
在所有列组上循环。对于简单的分配情况,也使用
malloc
,而不是
MPI\u Alloc\u mem
。后者主要用于分配特殊内存(特定MPI实现上下文中的任何特殊方法)。