【问题标题】:MPI library - problems saving values on arrayMPI 库 - 在数组上保存值时出现问题
【发布时间】:2014-06-15 15:09:42
【问题描述】:

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

编辑:

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

【问题讨论】:

  • 如果不清楚,这些数组的值在MPI_Gatherv函数上是需要的,并且只在根进程中有意义(在这种情况下是数字0)
  • 您正在使用未初始化的大小变量 (numprocs) 声明计数和显示数组。尝试将这些声明移至调用 MPI_COMM_SIZE 和 MPI_COMM_RANK 之后。
  • 我已经完成了,但仍然没有保存任何值;真的很奇怪
  • 你的编译器支持变长数组吗?您是否尝试过声明具有恒定长度的数组?
  • 是的,我已经尝试用恒定长度声明它。对我来说,问题是为什么这些值没有保存在数组中

标签: c arrays parallel-processing mpi spmd


【解决方案1】:

也许这行:

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

应该是:

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

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

【讨论】:

  • 没错,但仍然无法正常工作。问题是这些数组上没有保存任何项目
猜你喜欢
  • 2022-01-14
  • 2011-02-10
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 2011-08-02
相关资源
最近更新 更多