Parallel processing OpenMP和MPI交互

Parallel processing OpenMP和MPI交互,parallel-processing,mpi,openmp,Parallel Processing,Mpi,Openmp,嗨,目前我正在开发一个程序,我使用MPI并行工作。我想知道我是否可以使用OpenMP在for循环中获得额外的速度,这样我就可以从每个处理器中获得更多。我这样做会有什么好处吗?还有,我该怎么做呢?根据经验,这实际上取决于您的问题以及您使用了多少MPI进程 使用大量MPI进程通常可以改善数据的局部性,但并行化可能不允许使用大量进程 认为可以确保获得适当的加速比的想法通常是错误的:-(…但是,如果由于缺乏并行效率而无法使用更多MPI进程,则可能获得更高效地使用更多内核的可能性 根据经验,您应该以少量线

嗨,目前我正在开发一个程序,我使用MPI并行工作。我想知道我是否可以使用OpenMP在for循环中获得额外的速度,这样我就可以从每个处理器中获得更多。我这样做会有什么好处吗?还有,我该怎么做呢?

根据经验,这实际上取决于您的问题以及您使用了多少MPI进程

使用大量MPI进程通常可以改善数据的局部性,但并行化可能不允许使用大量进程

认为可以确保获得适当的加速比的想法通常是错误的:-(…但是,如果由于缺乏并行效率而无法使用更多MPI进程,则可能获得更高效地使用更多内核的可能性

根据经验,您应该以少量线程为目标(4-8,套接字核心数的1/2),特别是当您只有少量循环时(如果达到最大MPI进程数,则应如此)

混合并行的一个很好的介绍:

MPI+OpenMP的组合被广泛使用。您最喜欢的搜索引擎是一个更好的起点,尽管您会在这里找到很多关于这个主题的问题。这个问题没有通用的答案;一些MPI应用程序从线程中受益,一些则没有。例如,对于我们的HPC应用程序(),线程化带来了显著的改进,但并没有减少运行时间。我们只是通过在线程之间共享数据结构(在相同节点上运行的不同MPI进程的单独地址空间中是冗余的)来节省大量内存,这使我们能够解决更大的计算问题。第一个被广泛用于MPI的CPU是这样的,即大多数应用程序仅使用MPI就可以实现接近完全的性能,前提是您不会耗尽物理内存,如前面的一条评论所述。“混合”(通常MPI漏斗状}与OpenMP结合可能有助于减少并行性带来的内存增长,并减少群集节点之间的互连流量。如果您只为单个节点编写应用程序,您可能不会遇到将MPI与OpenMP结合的麻烦,尽管在某些情况下,多CPU平台可能会通过在每个CPU上运行多线程MPI排名的好处。MPI/OpenMP的成功最有可能应用于显示(或可以调整)3个并行级别;MPI外部,中间的OpenMP线程,以及内部循环中的内核并行(SIMD等)。