Estoy trabajando en un algoritmo que hace bastante la misma operación un montón de veces. Como la operación consiste en un poco de álgebra lineal (BLAS), creo que intentaré usar la GPU para esto.¿Cómo funciona la cola de comandos opencl, y qué puedo preguntar
He escrito mi kernel y comencé a presionar kernels en la cola de comandos. Como no quiero esperar después de cada llamada, creo que trataría de conectar en cadena mis llamadas con eventos y simplemente comenzar a presionarlos en la cola.
call kernel1(return event1)
call kernel2(wait for event 1, return event 2)
...
call kernel1000000(vait for event 999999)
Ahora mi pregunta es, ¿todo esto se ve empujado al chip gráfico de ¿almacena el conductor la cola? Hay un límite en el número de eventos que puedo usar, o en la longitud de la cola de comandos, he buscado pero no he podido encontrarlo.
Uso atMonitor para comprobar el uso de mi gpu 'y es bastante difícil presionarlo por encima del 20%, ¿podría ser simplemente porque no puedo enviar las llamadas lo suficientemente rápido? Mis datos ya están almacenados en la GPU y todo lo que estoy transmitiendo son las llamadas reales.
Ok, ¿me puede decir de dónde sabe esto? Estoy tratando de descubrir las especificaciones reales de opencl, pero no es nada fácil. (Estoy considerando cambiar a CUDA). ¿Qué dice usted que el controlador agrupa los comandos y los envía al gpu en grandes porciones? –
Creo que el controlador agrupa los comandos ya que según la documentación de OpenCL, cliquea bloques hasta que todos los comandos en la cola de comandos pasados hayan terminado de ejecutarse, a menos que invoques clFinish OpenCL decidirá cuándo se ejecutan los comandos. Sin embargo, las llamadas a clFinish son costosas y deben evitarse, aún así lo intentaré. ¿Has considerado que tu GPU es posiblemente lo suficientemente rápida para ejecutar tu cálculo sin necesitar el 100% de la potencia? La única otra cosa en la que puedo pensar es que OpenCL limita el uso de la GPU para que la pantalla de las computadoras no se bloquee –