我有一个MPI应用程序,它目前有一个进程(称为A),它给可伸缩性带来了严重的问题。目前,所有其他进程都处于一个MPI_Recv中,等待一个进程向它们发送信息。
由于我希望现在以尽可能少的努力来加速现在的,所以我考虑使用OpenMP并行化流程A。这有实际意义吗?
由于与A共享节点的其他进程位于MPI_Recv中,我是否可以利用来自该节点的所有资源来处理进程A,或者MPI_Recv是否会阻止这一点?
使用OpenMP的另一个好处是可以共享内存,因为进程A占用了很多时间。
顺便说一句,如果我的处理器正在等待MPI_Send而不是MPI_Recv,它会改变什么吗?
发布于 2012-05-30 02:23:12
是的,可以使用OpenMP在本地与负责工作分发的OpenMPI (即节点间的OpenMPI和节点内的OpenMP )并行化某个进程。这个概念被称为混合编程与OpenMP和MPI (如果你在谷歌上找到了几个有用的链接)。
MPI_Send和MPI_Recv调用阻塞调用(有关详细信息,您可以查看这个post 发送和记录“等待什么”),这意味着如果节点在MPI_Recv中被阻塞,它们将被阻塞等待数据。但是,您可以使用各自的异步方法伊森德和伊雷科夫来提高性能,而代价是必须处理争用条件和仔细的缓冲区处理。一个示例和进一步的信息可以找到这里。
在我看来,你有两个选择:
我希望这能帮到你。
https://stackoverflow.com/questions/10792508
复制相似问题