我有一个c++代码,可以并行运行,但使用共享内存方法。我将代码链接到PETSc,PETSc能够并行运行代码,但使用分布式内存方法。当我并行运行代码(c++与PETSc链接)时,似乎所有的处理器都在重复同一个任务。例如,当处理器数为4个时,边界条件和初始条件将被读取4次,或者如果我使用printf命令,则会打印4次。因此,这意味着作业不是在处理器之间分配的,所有处理器都在执行整个任务,而不是执行其中的某些部分。有没有人有同样的经验,你有什么建议来解决这个问题?例如,下面可以看到代码读取网格两次,而不是读取一次:
读取网格文件Mesh_cavity2d.txt: 读取网格文件Mesh_cavity2d.txt:
或者:
发布于 2014-05-23 19:00:23
这种行为通常表明两种情况之一。要么您忘记将输出(和其他功能)限制为只在一个级别上运行。实现此操作的简单方法是使用MPI_Comm_rank获取秩号,并将所有I/O和其他操作放在
if (rank==0)
{
// I/O here
}你也可能会遇到一些问题,让你的队伍彼此沟通。我看到了很多原因,从不正确的库习惯到在MPI下运行一个非MPI程序。
https://stackoverflow.com/questions/23835761
复制相似问题