我正在尝试优化名为LAMMPS (https://github.com/lammps/lammps)的https://github.com/lammps/lammps基准测试的性能。现在我运行的是两个MPI进程和两个GPU。我的系统有两个套接字,每个套接字连接到2个K80。由于每个K80内部包含2个GPU,因此每个套接字实际上连接到4个GPU。但我只使用两个核心在一个插座和2个GPU (1 K80)连接到该套接字。MPI编译器是MVAPICH2 2.2rc1,CUDA编译器版本是7.5。
这就是背景。我分析了应用程序,发现通信是性能瓶颈。我怀疑这是因为没有应用GPUDirect技术。因此,我切换到MVAPICH-GDR2.2rc1,并安装了所有其他必需的库和工具。但是MVAPICH2需要Infiniband接口卡,这在我的系统上是不可用的,所以我有运行时错误“通道初始化失败,系统上没有找到活动的HCA”。根据我的理解,如果我们只想在一个节点上使用1 K80内的GPU,则不需要Infiniband卡,因为K80对这两个GPU有一个内部PCIe开关。这些都是我的疑虑。为了澄清这些问题,我列举如下:
发布于 2016-07-21 14:03:48
在我的系统中,一个套接字连接到两个K80。如果一个K80中的两个GPU需要与另一个K80中的GPU通信,那么如果我们想使用GPUDirect,就必须拥有IB卡,对吗?
唯一需要IB卡的时间是在MPI通信(GPU或其他)从一个系统到另一个系统的时候。同一系统中的GPU不需要IB卡来相互通信。有关在此(单系统)设置中使用GPUDirect的更多信息如下所示。
如果我们只需要在1 K80内使用这两个GPU,那么这两个GPU之间的通信不需要IB卡,对吗?然而,MVAPICH2 2-GDR至少需要一张IB卡。那么,有没有解决这个问题的办法呢?还是我要在系统上加一个IB卡?
MVAPICH2-GDR中的是指GPUDirect.GPUDirect是一组允许GPU直接相互通信的通用技术总括术语。
对于同一系统中的GPU,GPUDirect技术称为Peer.K80上的两个GPU应该始终能够使用Peer相互通信,并且您可以使用具有P2P (比如simpleP2P )的CUDA示例代码来验证这一点。此示例代码还将告诉您,您的系统是否能够支持同一系统中任意2个GPU之间的P2P。
对于通过IB (Infiniband)网络连接的不同系统中的GPU,还有一种称为GPUDirect的附加GPUDirect技术。这允许在不同系统中的两个GPU通过IB链路相互通信。
因此,由于MVAPICH2合并了与IB相关的GPUDirect RDMA,它可能在默认情况下将寻找IB卡。
但是,您应该能够通过使用支持GPUDirect的MPI (包括某些类型的MVAPICH2)来获得通信的好处,即使是在单个系统中的GPU之间也是如此,例如使用K80。这种用法被简单地称为“CUDA感知的MPI",因为它使用的是GPUDirect P2P,而不一定是RDMA。
关于如何设置该主题的详细教程和演练超出了我可以在这样的答案中提供的内容,但关于这种用法的更多信息,我将请您参阅两篇详细介绍此主题的博客文章,第一篇是这里,第二部分是这里。关于GPUDirect的更多信息是这里。
https://stackoverflow.com/questions/38495608
复制相似问题