Sto utilizzando CUDA 6.0 e l'implementazione OpenCL fornita in bundle con l'SDK CUDA. Ho due kernel identici per ogni piattaforma (differiscono per le parole chiave specifiche della piattaforma). Loro leggono e scrivono solo la memoria globale, ogni posizione diversa del thread. La configurazione di avvio per CUDA è 200 blocks of 250 threads (1D)
, che corrisponde direttamente alla configurazione per OpenCL - 50,000 global work size and 250 local work size
.Confronto prestazioni CUDA vs OpenCL
Il codice OpenCL è più veloce. È possibile o sto sbagliando? La mia comprensione è che l'implementazione OpenCL di NVIDIA è basata su quella per CUDA. Ottengo prestazioni migliori del 15% con OpenCL.
Sarebbe bello se si potesse suggerire perché potrei vedere questo e forse alcune differenze tra CUDA e OpenCL come implementato da NVIDIA?
I risultati non sono coerenti tra problemi e casi. Ma il tuo potrebbe avere ragione. OpenCL funziona in modo asincrono per impostazione predefinita, quindi, se si utilizza CUDA così com'è (non-asincrono), probabilmente darà prestazioni leggermente più lente di OpenCL. – DarkZeros
Ho già sentito che l'implementazione di OCL di NVIDIA è basata su CUDA. Tuttavia, ogni volta che ho cercato di trovare alcune fonti, non ho mai trovato alcuna prova di ciò. Ho concluso che si tratta di un errore basato sul fatto che CUDA viene erroneamente utilizzato come nome della lingua mentre in realtà è una "piattaforma di calcolo parallelo e un modello di programmazione" (Compute Unified Device Architecture) come da Wikipedia. Quindi quando vedi una diapositiva di NVIDIA che mostra che sotto OCL c'è una piccola chiamata CUDA è la GPU che è un chip CUDA. Potresti postare la tua fonte se ne hai? Mi piacerebbe sapere per certo. – CaptainObvious
OpenCL e CUDA sono completamente diversi. Entrambi usano lo stesso HW alla fine. Ma proprio come OpenGL e DirectX, uno non è sotto l'altro o viceversa. I punti principali per affermare che le librerie sono diverse, i compilatori sono diversi e anche il modello di esecuzione è diverso. Alcune parti potrebbero essere comuni, ma la maggioranza no. – DarkZeros