我正在尝试在进程上保存数组的值,特别是在数字0处。因此,如果其等级为0,我提出了保存这些值的条件:
int main(int argc, char *argv[])
{
int rank,numprocs;
int count[numprocs];
int disp[numprocs];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
//... whatever
if (rank==0) {
//whatever
for(i=0;i<numprocs-1;i++) {
count[i]= ...
disp[i] = ...
}
//whatever
}
//... whatever
MPI_Gatherv(sendbuff,size, MPI_Type, //Send from all
recbuff, count, disp, MPI_Type,
0,MPI_Communicator); //Receive on root
}
实际上,进程0的count
和disp
是所有值都为0的数组。我不明白这种行为。第一次循环有什么不对吗?
修改
错误不在此代码的这一部分。此代码按预期工作
答案 0 :(得分:1)
也许是这句话:
for(i=0;i<numprocs-1;i++)
应该是:
for(i=0;i<numprocs;i++)
在第一种情况(上图)中,如果numprocs为2,则只会初始化count []和disp []的索引0;将这些数组中的索引1保留为未初始化。