给定一个由多个节点组成的集群,每个节点都托管多核处理器,在节点和节点之间使用MPI的优势是使用纯全MPI吗?如果我理解正确,如果我在一个节点上运行MPI程序并指示进程数等于内核数,那么我将在一个单独的内核上运行多个进程的一个诚实的并行MPI作业。那么为什么要使用节点内的线程和节点之间的MPI来进行混合并行化呢?在MPI + CUDA混合的情况下,我毫无疑问,因为MPI不能使用GPU,但它可以使用CPU内核,为什么要使用线程?
答案 0 :(得分:9)
使用OpenMP / pthread线程和MPI进程的组合称为混合编程。程序比纯MPI更难,但随着最近OpenMP的延迟减少,使用Hybrid MPI很有意义。一些优点是:
但是混合MPI也有它的缺点,但你只问了它们的优点。
答案 1 :(得分:0)
这实际上是一个看起来更复杂的问题。
这取决于很多因素。根据经验,我会说:你总是乐于避免hibrid openMP-MPI。哪个是优化的混乱。但是有些东西是你无法避免的,主要取决于你正在解决的问题以及你有权访问的集群。
假设你正在解决一个高度可并行化的问题而且你有一个小集群,那么Hibrid可能会毫无用处。
但是如果你有一个问题,可以说这个问题可以很好地扩展到N个进程,但是在4N开始效率非常低。您可以访问具有10N核心的集群......然后,杂交将成为一种解决方案。每个MPI进程会使用少量线程,例如4(已知> 8效率不高)。 (考虑到KNL,我认识的大多数人都知道,即使一个芯片有68个内核,每个MPI进程使用4到8个线程也很有趣)
那么混合加速器/ openMP / MPI呢。
你加速器+ MPI错了。一旦您开始使用具有加速器的群集,您将需要使用某些功能,如openMP / MPI或CUDA / MPI或openACC / MPI,因为您需要在设备之间进行通信。现在你可以使用Direct GPU绕过CPU(至少对于Nvidia而言,不是其他构建者的线索,但我希望情况会如此)。然后通常每个GPU将使用1个MPI进程。大多数具有GPU的群集将具有1个套接字和N个加速器(N.