Come posso essere sicuro al 100% che il mio kernel opencl sia effettivamente in esecuzione sulla GPU e non sulla CPU. Non riesco a capirlo perché il kernel openCL può funzionare anche su CPU. Eventuali puntatori qui?Come faccio a sapere se il mio kernel OpenCL è in esecuzione su GPU?
risposta
È necessario scegliere tra piattaforme e dispositivi disponibili sul computer quando si crea il contesto OpenCL. È possibile ottenere informazioni su piattaforme e dispositivi con clGetPlatformInfo e clGetDeviceInfo. È possibile trovare codici di esempio in NVIDIA e AMD SDK per elencare piattaforme e dispositivi.
Per i dispositivi AMD (gDEBugger, Code XL), NVIDIA (Visual Profiler) e Intel (Intel GPA), è possibile utilizzare strumenti di profilatura.
È sufficiente utilizzare la GPU-Z di TechPowerUp per verificare se ci sono carichi di lavoro sulla GPU. un'altra soluzione: è possibile specificare esplicitamente se si sta utilizzando la GPU nel tipo di dispositivo CL_Device_Type_GPU.
Uso MenuMeters sul mio Macbook Pro & Mac Pro: se la CPU è in uso è ovvio. (Non so se gli strumenti di profiling avrebbe funzionato per me quando si utilizza OpenCL sotto XCode ....)
Quando si crea il contesto, utilizzare clCreateContextFromType dove è possibile passare il flag CL_DEVICE_TYPE_GPU, che specifica che si desidera Solo GPU. qualcosa di simile garanzie l'uso di una GPU (si può essere sicuri al 100%):
cl_uint num_platforms = 0;
clGetPlatformIDs(0, NULL, &num_platforms);
cl_platform_id* platform = malloc(sizeof(cl_platform_id) * num_platforms);
cl_context_properties cprops[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)platform[0], 0 };
ctx = clCreateContextFromType(cprops, CL_DEVICE_TYPE_GPU, NULL, NULL, &err);
Se avete già il vostro contesto e dispositivi di set up, è possibile interrogare il tipo di un dispositivo in questo modo:
cl_device_type dev_type;
clGetDeviceInfo(my_device, CL_DEVICE_TYPE, sizeof(dev_type), &dev_type, NULL);
if (dev_type == CL_DEVICE_TYPE_GPU) {
printf("I'm 100%% sure this device is a GPU");
}
Tutto ciò che si accoderà a una coda di comandi creata su questo dispositivo verrà eseguito su GPU.
- 1. Come faccio a sapere che il mio codice è in esecuzione su Mono?
- 2. Come faccio a sapere se il mio server ha NUMA?
- 3. Come compilare il kernel OpenCL in bitstream?
- 4. Ottimizzazione del codice del kernel in opencl per una GPU
- 5. Come eseguire il debug di OpenCL su GPU Nvidia?
- 6. Come faccio a sapere se il mio IE è a 64 bit? (Anche per Java?)
- 7. Chiamare il kernel OpenCL da un altro kernel OpenCL
- 8. Come faccio a sapere se la mia app è in esecuzione con Robolectric?
- 9. Esecuzione simultanea del kernel GPU da più processi
- 10. Come sapere se è in esecuzione un'applicazione a schermo intero?
- 11. Come posso sapere se il mio script Perl è in esecuzione in Windows?
- 12. Come faccio a sapere il mio sistema disponibile Gradle buildToolsVersion
- 13. Come faccio a sapere se uno script di bash è in esecuzione con nohup?
- 14. Come faccio a sapere quale porta seriale usare su Linux?
- 15. Come faccio a sapere se questo è abbastanza casuale?
- 16. Misurare il tempo di esecuzione di OpenCL kernel
- 17. Come faccio a sapere su quale nodo è in esecuzione un processo di erlang?
- 18. Come faccio a sapere se una tabella è una matrice?
- 19. OpenCL: istruzione popcnt a 32 e 64 bit su GPU?
- 20. Come posso sapere se IPython è in esecuzione?
- 21. Come faccio a sapere se MotionEvent è relativo o assoluto?
- 22. Come faccio a sapere se un appuntamento è privato
- 23. Dispositivo OpenCL CPU vs dispositivo GPU
- 24. Come posso sapere se il mio contesto è ancora valido?
- 25. Come faccio a sapere in COLUMN il mio cursore su Xcode?
- 26. Come faccio a sapere se il mio browser supporta SVG 2.0?
- 27. Come faccio a sapere se sono nel debugger sotto Android?
- 28. Esecuzione di OpenCL su hardware da fornitori misti
- 29. Come posso sapere se il mio sottoprocesso è in attesa per il mio ingresso (in python3)
- 30. Come faccio a sapere se il mio Tomcat supporta Servlet 3.0 o no?