我正在尝试优化名为 LAMMPS ( https://github.com/lammps/lammps ) 的 MPI+CUDA 基准测试的性能。现在我正在运行两个 MPI 进程和两个 GPU。我的系统有两个插座,每个插座连接到 2 个 K80。由于每个 K80 内部包含 2 个 GPU,因此每个插槽实际上连接到 4 个 GPU。但我只在一个插槽中使用 2 个内核,以及连接到该插槽的 2 个 GPU(1 K80)。MPI 编译器是 MVAPICH2 2.2rc1,CUDA 编译器版本是 7.5。
这就是背景。我分析了应用程序,发现通信是性能瓶颈。我怀疑这是因为没有应用 GPUDirect 技术。所以我切换到 MVAPICH2-GDR 2.2rc1 并安装了所有其他必需的库和工具。但是 MVAPICH2-GDR 需要 Infiniband 接口卡,这在我的系统上不可用,所以我有运行时错误“通道初始化失败。系统上没有找到活动的 HCA”。根据我的理解,如果我们只想在一个节点上使用 1 K80 以内的 GPU,则不需要 Infiniband 卡,因为 K80 具有用于这两个 GPU 的内部 PCIe 开关。这些是我的疑惑。为了让问题更清楚,我将它们列出如下:
在我的系统中,一个插座连接到两个 K80。如果一个 K80 中的两个 GPU 需要与另一个 K80 中的 GPU 通信,那么我们要使用 GPUDirect 就必须有 IB 卡,对吗?
如果我们只需要使用1个K80内的两个GPU,那么这两个GPU之间的通信就不需要IB卡了,对吧?但是,MVAPICH2-GDR 至少需要一张 IB 卡。那么有什么办法可以解决这个问题吗?或者我必须在系统上插入 IB 卡?