Я хотел бы иметь возможность сопоставлять устройства 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 работает только с Cidia NVID), но только с CUDAустройств.
В идеале мне нужно решение с использованием C или C ++.