2011-11-09 22 views
4

加速应用程序的常用方法是使用MPI或更高级别的库(如使用MPI下的PETSc)来并行化应用程序。MPI + CUDA在纯MPI上的优势是什么?

不过现在大家似乎都有兴趣使用CUDA来并行化他们的应用程序,或者使用MPI和CUDA的混合来处理更大的问题。

在使用混合MPI + CUDA编程模型而不是传统的经过验证的MPI并行编程模型中,是否有任何明显的优势?我特别要求在粒子方法的应用领域

为什么我问这个问题的一个原因是,在网络上的任何地方我都看到了“粒子方法自然地映射到GPU的体系结构”或者这个。但是,他们似乎从来没有证明为什么我会更好地使用CUDA而不是使用MPI来完成同一项工作。

+1

因为那么你可以在GPU上运行它,并且它们的吞吐量比CPU的集群更低。 – harold

回答

12

这是一个苹果和橘子。

MPI和CUDA有着根本不同的体系结构。最重要的是,MPI允许您将应用程序分布在多个节点上,而CUDA允许您在本地节点中使用GPU。如果在MPI程序中你的并行进程需要很长时间才能完成,那么你应该考虑如何通过使用GPU而不是CPU来加速他们的工作。相反,如果您的CUDA应用程序仍然需要很长时间才能完成,则可能需要使用MPI将工作分发到多个节点。

这两种技术几乎是正交的(假设群集上的所有节点都支持CUDA)。

1

只是为了构建其他海报已经很好的答案,对GPU所擅长的问题以及原因进行了一些高层次的讨论。

GPU由于其独特的起源而遵循与CPU不同的设计路径。与CPU内核相比,GPU内核包含更多的ALU和FP硬件以及更少的控制逻辑和缓存。这意味着GPU可以为直接计算提供更高的效率,但只有使用常规控制流和智能内存访问模式的代码才能看到最大的好处:达到SP FP的TFLOPS以上。 GPU被设计为控制和存储器级别的高吞吐量,高延迟设备。全局可访问的存储器具有长而宽的总线,因此尽管长时间延迟,合并(连续和对齐)的存储器访问实现了良好的吞吐量。由于要求大规模的线程并行性并且通过硬件提供基本上零开销的上下文切换,所以隐藏延迟。 GPU采用类SIMD模型SIMT,其中核心组以SIMD锁步执行(不同组可以自由分散),而不会强迫程序员考虑这一事实(除了达到最佳性能:在费米,这可能会使差异达32倍)。 SIMT适用于数据并行编程模型,从而利用数据独立性对大量数据执行类似的处理。正在努力推广GPU和他们的编程模型,以及简化编程以获得良好的性能。