0

我正在尝试将值保存在进程中的数组上,特别是在数字 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
}

事实上,countdisp进程 0 是所有值都为 0 的数组。我不明白这种行为。第一次循环有什么问题吗?

编辑:

错误不在此代码的这一部分。此代码按预期工作

4

1 回答 1

1

也许这条线:

for(i=0;i<numprocs-1;i++) 

应该:

for(i=0;i<numprocs;i++) 

第一种情况(上图),如果 numprocs 为 2,则只会初始化 count[] 和 disp[] 的索引 0;使这些数组的索引 1 未初始化。

于 2014-04-29T15:28:20.133 回答