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

标签 c++ parallel-processing mpi mpich petsc

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

reading mesh file Mesh_cavity2d.txt:

reading mesh file Mesh_cavity2d.txt:

或:

最佳答案

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

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

您也可能在让您的队伍相互交流时遇到问题。我已经看到有多种原因导致此问题,从使用不正确的库到在 MPI 下运行非 MPI 程序。

关于c++ - 使用 MPI 在处理器之间分配工作,但所有处理器都在完成整个工作,而不是只做其中的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23835761/

相关文章:

matlab - MATLAB parfor 中的错误版本或字节序键?

c++ - 在 MPI、C++ 上分配单个堆栈数组

c++ - Qt中如何跨不同的对话框存储变量

c++ - 没有对象的模板打印成员变量

c++ - MFC:CMFCToolBar SetButtonStyle 不适用于样式 TBBS_PRESSED?

c++ - 从非版本控制文件夹移动到版本控制文件夹后,VC++ VS2013 项目无法编译

c++ - OpenMP:为什么这个应用程序有时会扩展?

python - 重复并行运行一个函数

c++ - 使用 MPI 进行 Valgrind+gdb 调试,库中出现错误?

debugging - 如何调试 MPI 程序?