Estoy intentando ejecutar un kernel en la GPU y realizar cálculos adicionales en el host (CPU). Veo a este efecto:La ejecución del kernel OpenCL no se inicia hasta que clFinish o clWaitForEvents se llamen
sólo el núcleo necesita alrededor de 2.000 ms:
clEnqueueNDRangeKernel ...
clFinish (o clWaitForEvents, he intentado tanto)
Simulé cómputo adicional en la CPU con suspensión (10):
clEnqueueNDRangeKernel ...
sueño (10);
clFinish (o clWaitForEvents)
En teoría, el kernel debe ejecutarse en la GPU y después del sueño de 10 segundos el núcleo debe ser terminado. Pero la medición del tiempo dice que todo necesita 12000ms en lugar de 10000.
¿ClFinish o clWaitForEvents invocan al núcleo para iniciar o me perdí algo?
Estoy usando una CPU/GPU AMD Fusion y Linux.
Muchas gracias.
¿Qué tan grande son sus datos? ¿Es posible que 2000 ms represente el tiempo necesario para transferir sus datos de la GPU a la CPU? – user1202136
Los datos están por debajo de 1 MB. Pero no debería estar en mi medida. Copio datos en el dispositivo, comienzo a medir, ejecuto el kernel + sleep + clFinish, dejo de medir, copio los datos al host – Tomas
¿Cómo está midiendo exactamente? ¿Copia sus datos al dispositivo sincrónicamente? – reima