我希望能够在由PCI ID识别的多GPU系统上将OpenCL设备与系统中的GPU相匹配.
例如,如果我的系统有多个GPU,可能来自不同的供应商,我可以通过枚举PCI总线列出设备.这给了我PCI供应商,设备和总线ID.如果我根据某些选择标准选择其中一个(GPU)PCI设备用于OpenCL计算,我该如何将其与OpenCL设备相匹配?
我可以使用clGetDeviceIDs()在OpenCL中枚举GPU设备,但没有明显的方法可以将OpenCL设备与PCI设备相匹配.OpenCL函数clGetDeviceInfo()提供对PCI供应商ID和设备名称的访问,但不提供对PCI设备或总线ID的访问.我可以尝试将PCI设备名称与OpenCL设备名称匹配,但是您可能有多个相同类型的设备,并且名称并不总是相同.
为什么这有必要?假设我知道程序X在GPU A上运行CUDA或其他东西.我想避免使用GPU A进行OpenCL操作,因此我选择GPU B.然后我需要弄清楚哪个OpenCL设备是GPU A,哪个是GPU B. PCI ID似乎是识别GPU设备的唯一一致且跨平台的方式.
顺便说一下,CUDA API确实为您提供了PCI,总线和插槽ID(CU_DEVICE_ATTRIBUTE_PCI_BUS_ID,CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID),但CUDA仅适用于NVidia设备.
理想情况下,我需要使用C或C++的解决方案.
这样做的方法是使用两个特定于供应商的扩展.对于AMD,您必须使用CL_DEVICE_TOPOLOGY_AMD
哪种适用于Windows和Linux,并将返回PCIe总线ID,这对于GPU来说是唯一的.在NVIDIA上,查询设备的CL_DEVICE_PCI_BUS_ID_NV.另见:https://anteru.net/2014/08/01/2483/
归档时间: |
|
查看次数: |
4912 次 |
最近记录: |