0

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

读取网格文件 Mesh_cavity2d.txt:

读取网格文件 Mesh_cavity2d.txt:

或者:

4

1 回答 1

2

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

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

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

于 2014-05-23T19:00:23.213 回答