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