如何确保Vulkan使用与CUDA相同的GPU?

如何确保Vulkan使用与CUDA相同的GPU?,cuda,pytorch,vulkan,hpc,Cuda,Pytorch,Vulkan,Hpc,我使用的应用程序在HPC集群(univa网格引擎)上同时使用vulkan和cuda(特别是Pytork) 提交作业时,群集计划程序设置一个环境变量SGE\u HGR\u gpu,其中包含作业要使用的gpu ID(因此其他用户运行的其他作业不使用相同的gpu) 告诉使用CUDA的应用程序使用特定GPU的典型方法是设置CUDA\u VISIBLE\u DEVICES=n 由于我也在使用Vulkan,我不知道如何确保从vkEnumeratePhysicalDevices中列出的设备中选择相同的设备 我

我使用的应用程序在HPC集群(univa网格引擎)上同时使用vulkan和cuda(特别是Pytork)

提交作业时,群集计划程序设置一个环境变量
SGE\u HGR\u gpu
,其中包含作业要使用的gpu ID(因此其他用户运行的其他作业不使用相同的gpu)

告诉使用CUDA的应用程序使用特定GPU的典型方法是设置
CUDA\u VISIBLE\u DEVICES=n

由于我也在使用Vulkan,我不知道如何确保从
vkEnumeratePhysicalDevices
中列出的设备中选择相同的设备

我认为'n'可以采用的值顺序与PCI总线上设备的顺序相同,但是我不知道
vkEnumeratePhysicalDevices
返回的设备顺序是否符合此顺序,并且文档没有指定此顺序


那么,我如何确保为Vulkan和CUDA选择相同的物理GPU呢?

使用
VkPhysicalDevicePropertiesKHR
(Vulkan 1.1)resp
VkPhysicalDeviceVulkan 11属性
(Vulkan 1.2)可以获取设备UUID,这是
CUDA\u可见设备
似乎使用的格式之一。您还应该能够使用
nvidiasmi-L
(或使用NVML库)将索引转换为UUID(反之亦然)

或者另一种方式,
cudaDeviceProp
包含PCI信息,可与
VK_EXT_PCI_bus_info
扩展输出进行比较


如果订单在Vulkan匹配,最好直接询问NVidia;我找不到NV如何订购的信息。从Vulkan加载程序实现的IIRC中,顺序应该与注册表中的顺序相匹配,然后是NV驱动程序本身给出的顺序。即使如此,您也必须从通用代码列表中筛选非NV GPU,并且您不知道NV Vulkan ICD实现是否与CUDA匹配,而不询问NV。

可能有兴趣:也有兴趣:@RobertCrovella谢谢!理想情况下,我希望避免针对cuda库编译vulkan模块,我的项目中的“cuda”组件位于完全不同的模块中,两个模块分别由python导入。Vulkan PCI设备API看起来很有希望,但必须尝试找出此处的信息与NVIDIA驱动程序分配的“GPU ID”之间的关系(目前尚不清楚)