【发布时间】:2017-02-01 17:17:52
【问题描述】:
我正在尝试将数据传递给MPI_Gather。我分配内存如下:
float *phie, *phitemp;
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
phitemp=(float *) malloc(20*sizeof(float));
if (rank==1) phie=(float *) malloc(itermax*20*size*sizeof(float));
然后让所有进程使用MPI_Gather() 将数据发送到排名 1,如下所示:
for (iter=0;iter<itermax;iter++) {
MPI_Gather((float *) phitemp, 20, MPI_FLOAT, (float *) (phie+iter*20*size*sizeof(float)), 20, MPI_FLOAT, 1, MPI_COMM_WORLD);
iter=0;
}
我收到错误消息,提示我没有正确分配内存。
【问题讨论】:
-
补充我的问题。我使用变量 iter 在 MPI_Gather() 中移动接收缓冲区的地址。 iter 在不同的处理器中可能有不同的值。 MPI_Gather 函数中使用了哪一个?用于接收数据的处理器?如果是这样,我如何确保不同的处理器都在等待它?
-
请在您的问题中添加具体错误消息的准确措辞!
-
如果您添加更多问题,请使用编辑功能并将添加的问题放在问题正文中。
标签: c malloc mpi pointer-arithmetic