【问题标题】:Gathering small matrix portions from different processes with MPI使用 MPI 收集来自不同工艺的小矩阵部分
【发布时间】:2013-11-13 02:27:14
【问题描述】:

我花了一些时间考虑计算矩阵的方案,一切都说得通,但还有最后一部分我不知道如何处理。

这是我打算做的(场景):

  1. 要求计算一个 10(w)x5(h) 矩阵。
  2. 我有 10 个处理器可用。
  3. 在每个单独的处理器上声明一个 1x5 矩阵,包括等级为 0 的 proc。
  4. 计算每个处理器上每个子矩阵的偏移量。
  5. MPI_Barrier 等待所有 10 个处理器完成计算。
  6. 显示完整的矩阵。

    一直到第五步我很高兴,但我不知道该怎么做才能越过障碍。没有一个处理器具有完整的 10x5 矩阵。一开始我想我不需要一个,我想要这样的东西:

      foreach(procX in proc(0-9))
          showColumn(procX)
    

但我不知道在 MPI_Barrier 之后会调用哪个处理器,也不知道如何根据处理器的顺序来打印东西(否则矩阵将无法正确打印)。

有没有人知道如何正常处理这个问题?我已经阅读了很多关于让每个处理器在矩阵的某些部分上工作的内容,但我找不到任何关于如何组合这些不同部分的内容。

我没有在我的代码中使用散点图(即,没有使用主从技术)

谢谢

【问题讨论】:

    标签: c mpi


    【解决方案1】:

    如果您不想在单个进程中收集整个矩阵,可以使用这样的循环:

    for ( i = 0; i < 9; i++ )
    {
        if ( i == myRank )
        {
            // print local matrix
        }
        MPI_Barrier(MPI_COMM_WORLD);
    }
    

    【讨论】:

    • 如何及时将所有内容发送到单个进程?
    • 与大多数关于优化的问题一样,真正的答案是“分析它并亲自查看”。通常,发送的消息越多,程序越慢,所以我建议在一个进程上收集结果并在那里打印。您的案例规模如此之小,但我怀疑它会产生很大的不同。
    • 绝对不能保证 IO 重定向会以这样一种方式工作,即来自 rank i 的输出会在来自 rank i+1 的输出之前得到中继和显示。
    【解决方案2】:

    虽然可以让每个等级打印自己的本地部分并按照 suszterpatt 给出的答案进行同步,但它依赖于不属于 MPI 标准的功能,因此不能保证始终有效,仅推荐用于诊断用途。

    首先,有些机器及其相应的 MPI 实现不允许 rank 0 以外的任何 rank 发送到其标准输出。其次,即使所有等级的标准输出都被重定向到mpiexec 进程,它通常也会被缓冲。因此,来自等级i+1 的标准输出可能会在等级i 的输出之前显示,即使使用屏障强制执行打印顺序也是如此。换句话说,MPI 不提供显式刷新操作(例如 fflush(stdout) 之类的操作),它可以强制将本地标准输出缓冲区发送到 mpiexec 并由后者显示。由实现决定如何处理它。

    更符合标准的方法是让每个等级将其矩阵的一部分发送到等级 0,然后打印:

    if (rank == 0)
    {
       allocate temp_buffer;
       for (i = 1; i < num_procs; i++)
       {
           receive from rank i into temp_buffer
           print temp_buffer
       }
    }
    else
    {
       send local matrix part to rank 0
    }
    

    这种方式不使用显式的屏障同步,因为只有一个进程输出,所以显示的行的顺序是有保证的。

    另一种选择是将每个等级打印到本地字符串缓冲区 - 例如使用sprintf - 然后将缓冲区发送到排名 0 并让后者显示接收到的字符串。

    【讨论】:

      猜你喜欢
      • 2015-06-02
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 2015-07-12
      • 2011-06-09
      • 2012-04-27
      • 2012-09-09
      相关资源
      最近更新 更多