OpenMP和MPI混合程序 [英] OpenMP and MPI hybrid program

查看:278
本文介绍了OpenMP和MPI混合程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一台带有8个处理器的机器.我想像这样在我的代码上交替使用OpenMP和MPI:

I have a machine with 8 processors. I want to alternate using OpenMP and MPI on my code like this:

OpenMP阶段:

  • 在MPI_Barrier上等待1-7级
  • 等级0将所有8个处理器与OpenMP一起使用

MPI阶段:

  • 等级0达到障碍,所有等级均使用一个处理器

到目前为止,我已经完成了:

So far, I've done:

  • 将I_MPI_WAIT_MODE设置为1,以使等级1-7处于障碍时不使用CPU.
  • 在等级0上设置omp_set_num_threads(8),以启动8个OpenMP线程.

一切正常.等级0确实启动了8个线程,但所有线程都限于一个处理器.在OpenMP阶段,我从运行在一个处理器上的等级0获得8个线程,而所有其他处理器都处于空闲状态.

It all worked. Rank 0 did launch 8 threads, but all are confined to one processor. On the OpenMP phase I get 8 threads from rank 0 running on one processor and all other processors are idle.

如何告诉MPI允许等级0使用其他处理器?我正在使用Intel MPI,但是如果需要可以切换到OpenMPI或MPICH.

How do I tell MPI to allow rank 0 to use the other processors? I am using Intel MPI, but could switch to OpenMPI or MPICH if needed.

推荐答案

感谢大家的评论和回答.没事的全部与"PIN"选项有关.

Thanks all for the comments and answers. You are all right. It's all about the "PIN" option.

要解决我的问题,我只需要:

To solve my problem, I just had to:

I_MPI_WAIT_MODE = 1

I_MPI_WAIT_MODE=1

I_MPI_PIN_DOMAIN = omp

I_MPI_PIN_DOMAIN=omp

就这么简单.现在所有处理器都适用于所有级别.

Simple as that. Now all processors are available to all ranks.

该选项

I_MPI_DEBUG = 4

I_MPI_DEBUG=4

显示每个等级获得的处理器.

shows which processors each rank gets.

这篇关于OpenMP和MPI混合程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆