【问题标题】:Parallel computing cluster with MPI (MPICH2) and nVidia CUDA具有 MPI (MPICH2) 和 nVidia CUDA 的并行计算集群
【发布时间】:2012-07-08 15:21:30
【问题描述】:

我需要编写一个应用程序,对字典中的单词进行哈希处理以制作 WPA 预共享密钥。这是我的“网络安全”课程的论文。应用程序需要并行以提高性能。我在 IT 研究中对 MPI 有一些经验,但我想将它与 CUDA 联系起来。这个想法是使用 MPI 将负载均匀地分配到集群的节点,然后利用 CUDA 在节点的 GPU 内并行运行各个块。

使用 MPI 分配负载是我可以轻松做到的事情,而且我过去也做过。我也可以学习使用 CUDA 进行计算。还有一个项目(pyrit)或多或少做了我需要做的事情(实际上更多),我可以从那里得到想法。

我想要一些关于如何在 MPI 和 CUDA 之间建立连接的建议。如果有人建造了这样的东西,我将非常感谢他的建议和建议。另外,如果您碰巧知道有关该主题的任何资源,请务必将它们指向我。

很抱歉介绍很长,但我认为有必要提供一些背景信息。

【问题讨论】:

  • 您可能对mvapich.cse.ohio-state.edu 感兴趣,它将 GPU 计算集成到 MPI 模型中。还有其他类似的努力正在进行中,不确定它们中的任何一个进展到什么程度。
  • 大多数当前的 MPI 实现都支持对 GPU 内存的透明操作——您只需直接提供一个指向 MPI_* 的设备指针,剩下的就交给库了。如果您在 InfiniBand 或其他 RDMA 互连上运行,它还可以为您节省一些内存复制时间,因为 RDMA 操作原则上可以在设备内存上完成。在使用固定内存时,您还应该注意一些pecularities
  • 首先,MPI 和 CUDA 之间没有连接;它们是正交的。您在使用 MPI 的节点之间进行通信,并在使用 CUDA 的节点上进行计算。其次,正如@HristoIliev 和 HP Mark 指出的那样,如果您有足够新的网卡、足够新的 CUDA 设备和足够新的 MPI 库,您可以通过让 MPI 直接将数据发送/接收到/来模糊界限。来自 GPU 内存,而不是通过 CPU 和主机内存,但这只是延迟优化,您在其他一切工作后实施。

标签: parallel-processing cuda mpi


【解决方案1】:

这个问题比较开放,所以很难给出明确的答案。这只是对我和乔纳森·杜尔西(Jonathan Dursi)取得高性能标记的 cmets 的总结。我不声明作者身份,因此将此答案设为社区 wiki。

MPI 和 CUDA 是正交的。前者是 IPC 中间件,用于在进程之间进行通信(可能位于不同的节点上),而后者为使用它的每个进程提供高度数据并行的共享内存计算。您可以将任务分解为许多小的子任务,并使用 MPI 将它们分发给在网络上运行的工作进程。 master/worker 方法适用于这种应用,特别是如果字典中的单词的长度变化很大并且处理时间的差异是可以预料的。提供所有必要的输入值后,工作进程可以使用 CUDA 并行执行必要的计算,然后使用 MPI 返回结果。 MPI 还提供了启动和控制多节点作业所需的机制。

尽管 MPI 和 CUDA 可以单独使用,但现代 MPI 实现提供了一些机制,模糊了这两者之间的界限。它可以是直接支持 MPI 通信操作中的设备指针,在必要时透明地调用 CUDA 函数来复制内存,或者甚至可以支持 RDMA 与设备内存之间的往来,而无需中间复制到主内存。前者简化了您的代码,而后者可以节省不同的时间,具体取决于您的算法的结构。后者还需要新的 CUDA 硬件和驱动程序以及更新的网络设备(例如更新的 InfiniBand HCA)。

支持直接 GPU 内存操作的 MPI 库包括 MVAPICH2 和主干 SVN 版本的 Open MPI

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2014-09-18
    • 2019-11-18
    • 2020-11-04
    • 2018-09-13
    相关资源
    最近更新 更多