Il codice OpenCL deve essere compilato per una GPU specifica?

2

La maggior parte delle esercitazioni OpenCL offre una buona introduzione a OpenCL, tuttavia non ho trovato informazioni sulla questione dell'interoperabilità degli obiettivi di compilazione. Sembra che devo compilare il codice OpenCL per la GPU di destinazione. Ora, quando si effettua una distribuzione binaria di un'applicazione che utilizza OpenCL, è necessario creare diversi build per le piattaforme del fornitore?

    
posta wirrbel 28.08.2013 - 14:55
fonte

2 risposte

3

OpenCL funziona in modo simile ad altre librerie GPU come OpenGL. Ciò che spedisci è una rappresentazione intermedia. Il driver della GPU esegue la compilazione finale per l'esecuzione sullo specifico dispositivo in fase di esecuzione. Qui è un'introduzione alla presentazione di diapositive OpenCL di Khronos.

Modifica: con OpenCL 2 il modello di compilazione ne modificava alcuni per renderlo molto più flessibile. Ora c'è un backend LLVM che si rivolge alla nuova rappresentazione intermedia SPIR-V, quindi qualsiasi compilatore di linguaggio che abbia come obiettivo LLVM dovrebbe essere in grado di essere utilizzato per target OpenCL. Oltre a questo il modello è praticamente lo stesso, ma guadagna un passaggio, compilazione di sorgenti a LLVM IR, LLVM IR compila a SPIR-V, il driver gestisce la compilazione finale e l'esecuzione.

    
risposta data 28.10.2013 - 16:30
fonte
0

No, non è necessario disporre di un binario compilato per piattaforma di destinazione: l'API di OpenCL supporta la compilazione di file binari del kernel per diversi dispositivi diversi e l'ottenimento del codice compilato con clGetProgramInfo() . Puoi farlo per più piattaforme di destinazione, posizionare tutti i tuoi binari nella distribuzione e inviarlo.

    
risposta data 28.08.2013 - 15:50
fonte

Leggi altre domande sui tag