我正在尝试在进程中将值保存到数组中,尤其是在数字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的countdisp是所有值均为0的数组。我不理解这种行为。第一次循环有什么问题吗?

编辑:

该代码的此部分中没有错误。该代码按预期工作

最佳答案

也许这行:

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


应该:

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


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

关于c - MPI库-在数组上保存值时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23368740/

10-11 21:24