Me gustaría poder hacer coincidir los dispositivos OpenCL con GPU en el sistema en sistemas multi-GPU identificados por ID de PCI.¿Cómo hacer coincidir los dispositivos OpenCL con una GPU específica dado proveedor de PCI, ID de dispositivo y bus en un sistema multi-GPU?
Por ejemplo, si tengo un sistema con varias GPU, posiblemente de diferentes proveedores, puedo enumerar los dispositivos enumerando el bus PCI. Esto me da ID de proveedor, dispositivo y bus PCI. Si elijo uno de estos dispositivos PCI (GPU) para usar para el cálculo de OpenCL en función de algunos criterios de selección, ¿cómo lo relaciono con el dispositivo OpenCL?
Puedo enumerar dispositivos GPU en OpenCL usando clGetDeviceIDs() pero no hay una manera obvia de unir dispositivos OpenCL a dispositivos PCI. La función OpenCL clGetDeviceInfo() proporciona acceso a la identificación del proveedor de PCI y al nombre del dispositivo, pero no a las identificaciones de los dispositivos PCI o bus. Podría intentar hacer coincidir el nombre del dispositivo PCI con el nombre del dispositivo OpenCL pero es posible que tenga más de uno del mismo tipo de dispositivo y los nombres no siempre son los mismos de todos modos.
¿Por qué es esto necesario? Digamos que sé que el programa X está ejecutando CUDA u otra cosa en la GPU A. También quiero evitar el uso de la GPU A para una operación OpenCL, así que elijo la GPU B. Luego necesito descubrir qué dispositivo OpenCL es GPU A y cuál es GPU B. Las ID de PCI parecen ser la única forma consistente y cruzada de identificación de dispositivos de GPU.
BTW, la API CUDA proporciona identificadores PCI, de bus y de ranura (CU_DEVICE_ATTRIBUTE_PCI_BUS_ID, CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) pero CUDA solo funciona con dispositivos NVidia.
Idealmente necesito una solución usando C o C++.
La especificación dice CL_DEVICE_VENDOR_ID "podría ser la identificación PCIe". Si eso no consigue lo que quieres, entonces no creo que haya nada en la especificación que lo haga. Sin embargo, todavía no estoy seguro de por qué necesita esto. Parece una optimización prematura. – vocaro
@vocaro: Sí, puedo obtener la identificación del vendedor. No creo que entiendas la pregunta. – jcoffland
Dice que desea conocer el ID del dispositivo PCI para evitar conflictos con otro proceso que puede estar usando una ID de dispositivo PCI específica. Me preguntaba cómo sabes qué dispositivos PCI están en uso. ¿Supongo que no estás usando OpenCL para eso? – Matt