首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenMP与OpenMPI

OpenMP与OpenMPI
EN

Stack Overflow用户
提问于 2012-05-29 02:43:52
回答 1查看 3.6K关注 0票数 1

我有一个MPI应用程序,它目前有一个进程(称为A),它给可伸缩性带来了严重的问题。目前,所有其他进程都处于一个MPI_Recv中,等待一个进程向它们发送信息。

由于我希望现在以尽可能少的努力来加速现在的,所以我考虑使用OpenMP并行化流程A。这有实际意义吗?

由于与A共享节点的其他进程位于MPI_Recv中,我是否可以利用来自该节点的所有资源来处理进程A,或者MPI_Recv是否会阻止这一点?

使用OpenMP的另一个好处是可以共享内存,因为进程A占用了很多时间。

顺便说一句,如果我的处理器正在等待MPI_Send而不是MPI_Recv,它会改变什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-30 02:23:12

是的,可以使用OpenMP在本地与负责工作分发的OpenMPI (即节点间的OpenMPI和节点内的OpenMP )并行化某个进程。这个概念被称为混合编程与OpenMP和MPI (如果你在谷歌上找到了几个有用的链接)。

MPI_SendMPI_Recv调用阻塞调用(有关详细信息,您可以查看这个post 发送和记录“等待什么”),这意味着如果节点在MPI_Recv中被阻塞,它们将被阻塞等待数据。但是,您可以使用各自的异步方法伊森德伊雷科夫来提高性能,而代价是必须处理争用条件和仔细的缓冲区处理。一个示例和进一步的信息可以找到这里

在我看来,你有两个选择:

  1. 使用OpenMPI平均分配工作负载,然后使用OpenMP对工作负载进行本地并行化(如果您有多个核心和几个具有多个核心的节点,则可以使用OpenMP为每个核心分配任务;使用OpenMPI通过节点分配部分任务,这些节点可以利用每个节点的本地架构并使用OpenMP);
  2. 重新编写程序以使用异步方法,以便有其他节点在必要时帮助节点A进行计算。

我希望这能帮到你。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10792508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档