使用MPI在处理器之间分配作业,但所有处理器都在完成整个工作,而不是只完成其中的一部分

时间:2014-05-23 18:04:51

标签: c++ parallel-processing mpi mpich petsc

我有一个c ++代码可以并行运行,但使用共享内存方法。我将代码链接到PETSc,PETSc能够并行运行代码但使用分布式内存方法。当我并行运行代码(与PETSc链接的c ++)时,似乎所有处理器都在重复相同的工作。例如,当处理器的数量是4时,边界条件和初始条件被读取4次,或者如果我使用printf命令,则将打印4次。因此,这意味着作业不会在处理器之间分配,并且所有处理器都在完成整个工作,而不是完成其中的某些部分。有没有人有相同的经验,你有什么建议才能解决这个问题? 例如,下面你可以看到代码正在读取网格两次而不是一次读取它:

  
    
      

读取网格文件Mesh_cavity2d.txt:

             

读取网格文件Mesh_cavity2d.txt:

    
  

或:

1 个答案:

答案 0 :(得分:2)

此行为通常表示两件事之一。要么忘记限制输出(和其他功能)只能在一个等级中运行。执行此操作的简单方法是使用MPI_Comm_rank获取排名,并将所有I / O和其他操作括在

if (rank==0)
{
  // I/O here
}

你也可能遇到让你的队伍互相沟通的问题。我已经看到了一些导致这种情况的因素,从使用不正确的库来运行MPI下的非MPI程序。