繁体   English   中英

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

[英]Distribution of MPI-threaded program on available GPUs, using 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,因此除生产环境外,我无法对其进行测试。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM