MPI + CUDA优于纯MPI的任何优势?

时间:2011-11-09 06:58:37

标签: algorithm cuda mpi

加速应用程序的常用方法是使用MPI或更高级别的库(如使用MPI的更高级别的库)来并行化应用程序。

然而现在每个人似乎都有兴趣使用CUDA来并行化他们的应用程序或使用MPI和CUDA的混合来解决更大的问题。

使用混合MPI + CUDA编程模型相比传统的,经过试验和测试的并行编程MPI模型有明显的优势吗?我特意在粒子方法的应用领域中提出这个问题

我提出这个问题的一个原因是网络上的任何地方我都看到“粒子方法自然地映射到GPU的架构”这一陈述或其中的一些变体。但他们似乎没有理由为什么我会更好地使用CUDA而不是仅使用MPI来完成相同的工作。

2 个答案:

答案 0 :(得分:12)

这有点苹果和橘子。

MPI和CUDA是根本不同的架构。最重要的是,MPI允许您在多个节点上分发应用程序,而CUDA允许您在本地节点中使用GPU。如果在MPI程序中你的并行进程需要很长时间才能完成,那么是的,你应该研究如何通过使用GPU代替CPU来完成它们的工作。相反,如果您的CUDA应用程序仍然需要很长时间才能完成,您可能希望使用MPI将工作分发到多个节点。

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

答案 1 :(得分:1)

只是建立在另一张海报已经很好的答案的基础上,对GPU擅长哪些问题及其原因进行一些高级别的讨论。

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