繁体   English   中英

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

[英]Using MPI to distribute the job between the processors but all the processors are doing the whole job instead of doing just some part of it

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

读取网格文件Mesh_cavity2d.txt:

读取网格文件Mesh_cavity2d.txt:

要么:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM