Cuando estaba terminando de codificar mi proyecto para una clase de programación multinúcle, encontré algo realmente extraño que quería discutir contigo.Mi kernel OpenCL es más lento en hardware más rápido ... ¿Pero por qué?
Nos pidieron que creáramos cualquier programa que mostrara una mejora significativa en la programación de una plataforma multi-core. Decidí probar y codificar algo en la GPU para probar OpenCL. Elegí el problema de la convolución matricial porque estoy bastante familiarizado con él (lo he paralelizado antes con open_mpi con gran velocidad para imágenes grandes).
Así que aquí está, selecciono un archivo GIF grande (2.5 MB) [2816X2112] y ejecuto la versión secuencial (código original) y obtengo un promedio de 15.3 segundos.
Luego, ejecuto la nueva versión de OpenCL que acabo de escribir en mi GeForce 9400M integrado en MBP y obtengo un promedio de 1.26s. ¡Hasta ahora todo bien, es una aceleración de 12X!
Pero ahora voy a mi panel de ahorro de energía para activar el "Modo de rendimiento gráfico". Ese modo apaga la GeForce 9400M y enciende la Geforce 9600M GT que tiene mi sistema. Apple dice que esta tarjeta es dos veces más rápida que la integrada.
Adivina qué, mi tiempo usando la tarjeta gráfica kick-culo son 3,2 segundos en promedio ... Mi 9600M GT parece ser más de dos veces más lenta que la 9400M ..
Para aquellos de ustedes que están inclinados OpenCL , Copio todos los datos en búferes remotos antes de comenzar, por lo que el cálculo real no requiere ida y vuelta al ariete principal. Además, dejo que OpenCL determine el tamaño de trabajo local óptimo ya que he leído que han realizado una implementación bastante buena para calcular ese parámetro.
¿Alguien tiene una pista?
edición: el código fuente completo con archivos make aquí http://www.mathieusavard.info/convolution.zip
cd gimage
make
cd ../clconvolute
make
put a large input.gif in clconvolute and run it to see results
¿Ha reiniciado el equipo después de cambiar la tarjeta gráfica? AFAIK esto es requerido en estas computadoras. –
He desconectado ... cuando quiere cambiar la tarjeta gráfica, lo obliga a cerrar la sesión e iniciar sesión + mi programa muestra el nombre de la tarjeta gráfica que se utiliza actualmente, así puedo asegurarme de cuál se está ejecutando ... – matdumsa
intenté reiniciar .. también intenté aumentar el tamaño del problema usando una imagen de 3264x2448 con una máscara 12X12 solo para encontrar los mismos resultados ... – matdumsa