使用Slurm在可用GPU上分发MPI线程程序

时间:2019-08-06 07:59:36

标签: gpu mpi slurm

我的程序由A和B两部分组成,两者都是用C ++编写的。 B是从单独的DLL加载的,并且可以根据链接的方式在CPU或GPU上运行。启动主程序时,它将创建A的一个实例,然后又创建一个B的实例(然后可以在本地可用的CPU或第一个GPU上运行)。
当使用mpirun(或通过slurm启动程序,然后依次启动mpirun)启动程序时,为每个MPI等级创建一个版本的A,从而为以下版本创建一个版本的B:本身。当系统中只有一个GPU时,将使用该GPU,但是如果系统中有多个GPU,会发生什么呢? B版本是否都放置在同一个GPU上,而不管是否有多个GPU可用,或者它们是否分布均匀?
有什么方法可以影响这种行为?不幸的是,我的开发机器没有多个GPU,因此除生产环境外,我无法对其进行测试。

1 个答案:

答案 0 :(得分:2)

Slurm通过例如--gpu-bind选项https://slurm.schedmd.com/gres.html支持和理解将MPI等级绑定到GPU。假设群集已正确配置为可以执行GPU亲和力,那么即使单个节点上有多个等级,也可以为每个等级分配一个GPU。

如果要进行测试,可以使用例如cudaGetDevicecudaGetDeviceProperties调用来获取每个等级的设备luid(本地唯一ID),然后检查是否存在节点内没有luid的重复。