Как сопоставить устройства OpenCL с конкретным графическим процессором с учетом поставщика PCI, идентификатора устройства и шины в системе с несколькими графическими процессорами?

Я хотел бы иметь возможность сопоставлять устройства 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 ++.

16
задан jcoffland 27 March 2015 в 19:59
поделиться