我想调用一个库,该库使用自身通过MPI并行运行的程序中的OpenMP并行化。如果我只使用一个进程来运行我的MPI程序,那么当需要调用OpenMP库时,会有7个附加线程(对应于我的机器上的核心数)正确生成,并且任务将并行执行。如果我在2个进程上运行我的MPI程序,并让每个进程调用OpenMP程序,它们每个都会产生自己的线程,而不像以前一样工作,从而使计算时间更长。在MPI程序中启动OpenMP程序
我试图让MPI主进程在其他进程等待时调用OpenMP库,但这些进程(物理内核)根本不参与OpenMP计算。
我必须告诉MPI程序它现在应该集体启动OpenMP程序吗?另一个复杂的事实是,我在具有多个节点的集群上运行MPI程序。仅在包含MPI主进程的节点上启动OpenMP程序才是可以接受的。
具体来说,我的MPI程序是用Cython编写的,并使用mpi4py。我使用MPICH作为MPI实现,但希望这不重要。 OpenMP程序是用C编写的,我通过Cython包装器调用它。
你的问题很混乱。标题提到了“OpenMP程序”,但是从文本中可以看出您正在调用使用OpenMP的库函数。请澄清,因为两者都是非常不同的东西。 –
您选择的MPI很重要,因为更广泛使用的MPI选择(至少在Linux上)提供了将OpenMP线程固定到独立内核的自动方法。否则,OpenMP进程可能需要在单独的节点上运行,除非您遇到了编写脚本以设置亲和性以及使用支持亲缘关系的OpenMP的麻烦。 – tim18
@HristoIliev我想我正在使用一个使用OpenMP的库。 –