1

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

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

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

对于冗长的介绍感到抱歉,但我认为有必要提供一些背景信息。

4

1 回答 1

3

这个问题在很大程度上是开放式的,因此很难给出明确的答案。这只是对 High Performance Mark、我和 Jonathan Dursi 的评论的总结。我不声称作者身份,因此将此答案设为社区 wiki。

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

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

支持直接 GPU 内存操作的 MPI 库包括MVAPICH2Open MPI的主干 SVN 版本。

于 2012-07-09T12:58:56.887 回答