Я хотел бы иметь возможность сопоставлять устройства OpenCL с графическими процессорами в системе в системах с несколькими графическими процессорами, идентифицированными идентификаторами PCI.
Например, если у меня есть система с несколькими графическими процессорами, возможно, от разных поставщиков, я могу перечислить устройства, перечислив шину PCI. Это дает мне идентификаторы поставщика PCI, устройства и шины. Если я выберу одно из этих (GPU) PCI-устройств для использования для вычислений OpenCL на основе некоторых критериев выбора, как мне сопоставить его с устройством OpenCL?
Я могу перечислить устройства GPU в OpenCL с помощью clGetDeviceIDs (), но нет очевидного способа сопоставить устройства OpenCL с устройствами PCI. Функция OpenCL clGetDeviceInfo () обеспечивает доступ к идентификатору поставщика PCI и имени устройства, но не к идентификаторам устройства или шины PCI. Я мог бы попытаться сопоставить имя устройства PCI с именем устройства OpenCL, но возможно, что у вас есть несколько устройств одного типа, и имена в любом случае не всегда одинаковы.
Зачем это нужно? Скажем, я знаю, что программа X запускает CUDA или что-то еще на GPU A. Я хочу избежать использования GPU A для операции OpenCL, поэтому я выбираю GPU B. Затем мне нужно выяснить, какое устройство OpenCL является GPU A, а какое - GPU. B. Идентификаторы PCI, по-видимому, являются единственным согласованным и кроссплатформенным способом идентификации устройств с графическим процессором.
Кстати, CUDA API действительно дает вам идентификаторы PCI, шины и слота (CU_DEVICE_ATTRIBUTE_PCI_BUS_ID, CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID), но CUDA работает только с устройствами NVidia.
В идеале мне нужно решение, использующее C или C ++.