我有一个c ++代码可以并行运行,但使用共享内存方法。我将代码链接到PETSc,PETSc能够并行运行代码但使用分布式内存方法。当我并行运行代码(与PETSc链接的c ++)时,似乎所有处理器都在重复相同的工作。例如,当处理器的数量是4时,边界条件和初始条件被读取4次,或者如果我使用printf命令,则将打印4次。因此,这意味着作业不会在处理器之间分配,并且所有处理器都在完成整个工作,而不是完成其中的某些部分。有没有人有相同的经验,你有什么建议才能解决这个问题? 例如,下面你可以看到代码正在读取网格两次而不是一次读取它:
读取网格文件Mesh_cavity2d.txt:
读取网格文件Mesh_cavity2d.txt:
或:
答案 0 :(得分:2)
此行为通常表示两件事之一。要么忘记限制输出(和其他功能)只能在一个等级中运行。执行此操作的简单方法是使用MPI_Comm_rank获取排名,并将所有I / O和其他操作括在
中if (rank==0)
{
// I/O here
}
你也可能遇到让你的队伍互相沟通的问题。我已经看到了一些导致这种情况的因素,从使用不正确的库来运行MPI下的非MPI程序。