Mi piacerebbe essere in grado di abbinare i dispositivi OpenCL con le GPU nel sistema su sistemi multi-GPU identificati dagli ID PCI.Come abbinare i dispositivi OpenCL a una GPU specifica in base al fornitore PCI, agli ID dispositivo e bus in un sistema multi-GPU?
Ad esempio, se si dispone di un sistema con più GPU, possibilmente di diversi fornitori, è possibile elencare i dispositivi enumerando il bus PCI. Questo mi dà l'identità del fornitore, del dispositivo e del bus PCI. Se scelgo uno di questi dispositivi (GPU) PCI da utilizzare per il calcolo di OpenCL sulla base di alcuni criteri di selezione, come posso abbinarlo al dispositivo OpenCL?
Posso elencare i dispositivi GPU in OpenCL utilizzando clGetDeviceIDs() ma non esiste un modo ovvio per associare i dispositivi OpenCL ai dispositivi PCI. La funzione OpenCL clGetDeviceInfo() fornisce l'accesso all'ID del fornitore PCI e al nome del dispositivo, ma non agli ID del dispositivo o del bus PCI. Potrei provare ad abbinare il nome del dispositivo PCI al nome del dispositivo OpenCL, ma è possibile che tu abbia più di uno dello stesso tipo di dispositivo e che i nomi non siano sempre uguali.
Perché è necessario? Dite che so che il programma X sta eseguendo CUDA o qualcos'altro su GPU A. Voglio evitare anche l'uso della GPU A per un'operazione OpenCL quindi scelgo GPU B. Devo quindi capire quale dispositivo OpenCL è GPU A e quale è GPU B. Gli ID PCI sembrano essere l'unico modo coerente e multipiattaforma per identificare i dispositivi GPU.
BTW, l'API CUDA fornisce ID PCI, bus e slot (CU_DEVICE_ATTRIBUTE_PCI_BUS_ID, CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) ma CUDA funziona solo con dispositivi NVidia.
Idealmente ho bisogno di una soluzione utilizzando C o C++.
La specifica dice CL_DEVICE_VENDOR_ID "potrebbe essere l'ID PCIe". Se questo non ottiene quello che vuoi, allora non penso che ci sia qualcosa nelle specifiche che lo faranno. Ancora non sono sicuro del motivo per cui hai bisogno di questo, però. Sembra un'ottimizzazione prematura. – vocaro
@vocaro: Sì, posso ottenere l'ID fornitore. Non penso che tu capisca la domanda. – jcoffland
Si dice di voler conoscere l'ID del dispositivo PCI per evitare il conflitto con un altro processo che potrebbe utilizzare un ID dispositivo PCI specifico. Mi sono chiesto come sai quali dispositivi PCI sono in uso? Immagino che tu non stia usando OpenCL per questo? – Matt