Los resultados obtenidos por el procesamiento de los opuestos al color (rojo-verde y azul- amarillo) se describen y grafican en esta secci´on. El procesamiento se realiz´on sobre la imagen mostrada en la figura30. Se comparan visualmente los resultados obtenidos por CPU y por la GPU. Las im´agenes mostradas en la tabla 14, son im´agenes en escala de grises de los opuestos al color de la figura 30, debido a que muestran ´unicamente el nivel de intensidad de sus respectivos colores. Las im´agenes en la columna izquierda, fueron procesadas por la CPU; las im´agenes de la columna central fueron procesadas por la GPU; y en la columna derecha se indica el nombre del componente de color.
Al igual que los componentes RGB, CMYK y HSV obtenidos por la GPU, los opuestos al color son visualmente id´enticos a los procesados por la CPU como se ve en la tabla 14.
La tabla 15, muestra el tiempo de procesamiento en milisegundos, para obtener los op- uestos al color (rojo-verde y azul-amarillo), tanto en la CPU como la GPU. Los resultados
Tabla 14: Im´agenes obtenidas de los opuestos al color.
CPU (hu´esped) GPU (dispositivo) Descripci´on
Opuesto Rojo-Verde
Opuesto Azul-Amarillo
muestran un incremento de velocidad conforme la imagen a procesar es de mayor dimensi´on, a partir de una imagen de 2048x2048 el incremento de velocidad respecto al tama˜no anterior es casi nulo. Pero se puede observar la gran aceleraci´on que se logra de hasta 45 veces m´as r´apida la implementaci´on en GPU respecto a su similar en CPU.
Tabla 15: Tiempo de procesamiento de los opuestos al color.
Tama˜no de la Imagen Tiempo CPU (ms) Tiempo GPU Velocidad
256X256 0.7646085 0.038544 19.84
512X512 3.4064055 0.095328 35.73
1024X1024 13.037562 0.308368 42.28
2048X2048 50.7260555 1.13608 44.65
4096X4096 201.7486115 4.414144 45.71
En la figura34, se muestra una gr´afica de comparaci´on entre la CPU y la GPU. Se puede observar un crecimiento de tipo exponencial de la linea que representa el tiempo de proce- samiento en la CPU. Mientras tanto, en la linea que representa el tiempo de procesamiento en la GPU tiene apenas un aumento de tipo logar´ıtmico. Esta gr´afica muestra la gran ven- taja que se puede percibir en una implementaci´on en la GPU, cuando el algoritmo tiene las
condiciones apropiadas para su implementaci´on en paralelo utilizando tarjetas gr´aficas.
Figura 34: Comparaci´on de CPU y GPU en tiempo (ms) para opuestos al color.
7.6 Mapas visuales
Los resultados obtenidos por el procesamiento de los mapas visuales se describen y grafican en esta secci´on. El procesamiento se realiz´on sobre la imagen mostrada en la figura 30. Se comparan visualmente los resultados obtenidos por CPU y por la GPU. Las im´agenes mostradas en la tabla 16, son im´agenes en escala de grises de los mapas visuales de la figura30, debido a que muestran ´unicamente el nivel de intensidad de sus respectivos mapas. Las im´agenes en la columna izquierda, fueron procesadas por la CPU; las im´agenes de la columna central fueron procesadas por la GPU; y en la columna derecha se indica el nombre del componente de color.
Al igual que los componentes RGB, CMYK, HSV y opuestos al color obtenidos por la GPU, los mapas visuales son visualmente id´enticos a los procesados por la CPU como se ve en la tabla16.
Tabla 16: Im´agenes de los mapas visuales obtenidos.
CPU (hu´esped) GPU (dispositivo) Descripci´on
Mapa Visual de Intensidad
Mapa Visual de Orientaci´on
Mapa Visual de Color
La tabla 17, muestra el tiempo de procesamiento en milisegundos, para obtener el mapa visual de intensidad, tanto en la CPU como la GPU. Los resultados muestran un incremento de velocidad conforme la imagen a procesar es de mayor dimensi´on, pero a partir de una imagen de 4096x4096 el incremento de velocidad respecto al tama˜no anterior es casi nulo. Pero se puede observar la gran aceleraci´on que se logra de hasta 38 veces m´as r´apida la implementaci´on en GPU respecto a su similar en CPU.
Tabla 17: Tiempo de procesamiento del mapa visual de intensidad.
Tama˜no de la Imagen Tiempo CPU (ms) Tiempo GPU Velocidad
256X256 0.478983 0.0504 9.50
512X512 2.341986 0.103072 22.72
1024X1024 8.687019 0.290112 29.94
2048X2048 33.765076 0.874976 38.59
4096X4096 129.840851 3.474176 37.37
Figura 35: Comparaci´on de CPU y GPU en tiempo (ms) para mapa visual de intensidad.
La tabla 18, muestra el tiempo de procesamiento en milisegundos, para obtener el mapa visual de orientaci´on, tanto en la CPU como la GPU. Los resultados muestran un incremento
de velocidad conforme la imagen a procesar es de mayor dimensi´on, pero que tal incremento de velocidad aumenta tan solo un poco conforme se procesa im´agenes de mayor tama˜no. El mayor incremento de velocidad en CUDA se da en la imagen de 4096x4096, con una velocidad de 17 veces mayor que la CPU.
Tabla 18: Tiempo de procesamiento del mapa visual de orientaci´on (CVA Aviones).
Tama˜no de la Imagen Tiempo CPU (ms) Tiempo GPU Velocidad
256X256 1.348019 0.5352 2.52
512X512 5.271912 0.824768 6.39
1024X1024 19.888878 1.587392 12.53
2048X2048 72.679047 4.593632 15.82
4096X4096 297.715912 16.69136 17.84
Figura 36: Comparaci´on de CPU y GPU en tiempo (ms) para mapa visual de orientaci´on.
La tabla 19, muestra el tiempo de procesamiento en milisegundos, para obtener el mapa visual de color, tanto en la CPU como la GPU. Los resultados muestran un incremento de velocidad conforme la imagen a procesar es de mayor dimensi´on, y tal incremento en
velocidad llega a ser de hasta 48 veces mayor la implementaci´on en la GPU respecto a la implementaci´on en la CPU cuando la imagen es de 4096X4096.
Tabla 19: Tiempo de procesamiento del mapa visual de color (CVA Aviones).
Tama˜no de la Imagen Tiempo CPU (ms) Tiempo GPU Velocidad
256X256 0.995874 0.063904 15.58
512X512 4.049063 0.226944 17.84
1024X1024 16.865969 0.460736 36.61
2048X2048 62.337875 1.438976 43.32
4096X4096 257.850891 5.362208 48.09
Figura 37: Comparaci´on de CPU y GPU en tiempo (ms) para mapa visual de color.
La tabla 20, muestra el tiempo de procesamiento en milisegundos, para obtener el mapa visual de forma, tanto en la CPU como la GPU. Los resultados muestran un incremento de velocidad conforme la imagen a procesar es de mayor dimensi´on, y tal incremento en velocidad llega a ser de hasta 35 veces mayor la implementaci´on en la GPU respecto a la implementaci´on en la CPU cuando la imagen es de 4096X4096.
Tabla 20: Tiempo de procesamiento del mapa visual de forma (CVA Aviones).
Tama˜no de la Imagen Tiempo CPU (ms) Tiempo GPU Velocidad
256X256 0.349998 0.03168 11.05
512X512 1.46389 0.058624 24.97
1024X1024 5.424023 0.169408 32.02
2048X2048 20.545006 0.604288 34.00
4096X4096 85.299973 2.383872 35.78
Figura 38: Comparaci´on de CPU y GPU en tiempo (ms) para mapa visual de forma.
7.7 Mapas conspicuos
Los resultados obtenidos por el procesamiento de los mapas conspicuos se describen y grafican en esta secci´on. El procesamiento se realiz´on sobre la imagen mostrada en la figura 30. Se comparan visualmente los resultados obtenidos por CPU y por la GPU. Las im´agenes mostradas en la tabla 21, son im´agenes en escala de grises de los mapas conspicuos de la figura30, debido a que muestran ´unicamente el nivel de intensidad de sus respectivos mapas.
Las im´agenes en la columna izquierda, fueron procesadas por la CPU; las im´agenes de la columna central fueron procesadas por la GPU; y en la columna derecha se indica el nombre del componente de color.
Al igual que los componentes RGB, CMYK, HSV, opuestos al color y mapas visuales obtenidos por la GPU, los mapas conspicuos son visualmente id´enticos a los procesados por la CPU como se ve en la tabla21.
La tabla 22, muestra el tiempo de procesamiento en milisegundos, para obtener un mapa conspicuo, tanto en la CPU como la GPU. Los resultados muestran un incremento de veloci- dad casi nulo en imagenes menores a 20148X2048, y a partir de una imagen de 2048x2048 el incremento de velocidad de la GPU respecto a la CPU es de 7 veces m´as r´apida, y en el caso de una imagen de 4096X4096 tan solo de 8 veces m´as r´apida.
En la figura 39, se muestra una gr´afica de comparaci´on entre la CPU y la GPU. Se puede observar un crecimiento de tipo exponencial de la linea que representa el tiempo de procesamiento en la CPU, pero haciendo referencia a la tabla22la ganancia en velocidad de la GPU respecto a la CPU es menor a 10 veces m´as r´apida.
Tabla 21: Im´agenes de los mapas conspicuos obtenidos.
CPU (hu´esped) GPU (dispositivo) Descripci´on
Mapa Conspicuo de Intensidad
Mapa Conspicuo de Orientaci´on
Mapa Conspicuo de Color
Tabla 22: Tiempo de procesamiento de un mapa conspicuo.
Tama˜no de la Imagen Tiempo CPU (ms) Tiempo GPU Velocidad
256X256 4.852712 8.621032 0.56
512X512 21.7015745 15.67465625 1.38
1024X1024 115.5475385 42.689024 0.73
2048X2048 806.1556855 108.0844955 7.46
4096X4096 6787.4824205 818.83084875 8.29
Figura 39: Comparaci´on de CPU y GPU en tiempo (ms) para un mapa conspicuo.
7.8 Mapas mentales
Los resultados obtenidos por el procesamiento de los mapas mentales se describen y grafican en esta secci´on. El procesamiento se realiz´on sobre la imagen mostrada en la figura 30. Se comparan visualmente los resultados obtenidos por CPU y por la GPU. Las im´agenes mostradas en la tabla 23, son im´agenes en escala de grises de los mapas conspicuos de la figura30, debido a que muestran ´unicamente el nivel de intensidad de sus respectivos mapas.
Las im´agenes en la columna izquierda, fueron procesadas por la CPU; las im´agenes de la columna central fueron procesadas por la GPU; y en la columna derecha se indica el nombre del componente de color.
Al igual que los componentes RGB, CMYK, HSV, opuestos al color, mapas visuales y mapas conspicuos obtenidos por la GPU, los mapas mentales son visualmente id´enticos a los procesados por la CPU como se ve en la tabla 23.
La tabla 24, muestra el tiempo de procesamiento en milisegundos, para obtener un mapa conspicuo, tanto en la CPU como la GPU. Los resultados muestran un incremento sustancial de velocidad entre la GPU y la CPU, y que es mayor cuando la imagen a procesar es mayor. Lo notable en los resultados de la tabla, es que cuando la imagen es de 4096X4096 la ganancia en velocidad es enorme, pues la GPU hace el mismo procesamiento que la CPU 184 veces m´as r´apido.
En la figura 39, se muestra una gr´afica de comparaci´on entre la CPU y la GPU. Se puede observar un crecimiento de tipo exponencial de la linea que representa el tiempo de procesamiento en la CPU, mientras el crecimiento de la linea que representa el tiempo de procesamiento en la GPU es casi nulo visualmente.
Tabla 23: Im´agenes de los mapas mentales obtenidos.
CPU (hu´esped) GPU (dispositivo) Descripci´on
Mapa Mental de Intensidad
Mapa Mental de Orientaci´on
Mapa Mental de Color
Tabla 24: Tiempo de procesamiento de un mapa mental (CVA Aviones).
Tama˜no de la Imagen Tiempo CPU (ms) Tiempo GPU Velocidad
256X256 18.272519 2.817832 6.48
512X512 73.25994875 13.487856 5.43
1024X1024 327.18825525 29.355224 11.15
2048X2048 1323.973053 100.49704175 13.17
4096X4096 68250.67041025 370.833374 184.05
Figura 40: Comparaci´on de CPU y GPU en tiempo (ms) para un mapa mental.
Un impacto importante en el procesamiento de un mapa mental, es la cantidad de op- eraciones realizadas para obtenerlo, y aunque en im´agenes peque˜nas parece no tener mucha ventaja la GPU respecto a la CPU, en tiempo su ganancia si llega a ser significativa.
7.9 Vector descriptor
Los resultados obtenidos por el procesamiento de los mapas mentales se describen y grafican en esta secci´on. El procesamiento se realiz´on sobre la imagen mostrada en la figura30. Aqu´ı los resultados no se muestran visualmente como los procesos anteriores, pero se muestran gr´aficas donde se observa que los valores finales obtenidos pr´acticamente no varian entre la GPU y la CPU.
La tabla 25, muestra el tiempo de procesamiento en milisegundos, para obtener un el vector descriptor, tanto en la CPU como la GPU. Los resultados muestran un incremento sustancial de velocidad entre la GPU y la CPU, y que es mayor cuando la imagen a procesar es mayor. Lo notable en los resultados de la tabla, es que cuando la imagen es de 4096X4096 la ganancia en velocidad es grande, pues la GPU hace el mismo procesamiento que la CPU 87 veces m´as r´apido. Y comparar 701 milisegundos, es decir casi un segundo, contra 61 segundos que tarda la CPU llega a ser muy considerable cuando se trata de reconocer objetos en tiempo real, o lo m´as r´apido posible.
Tabla 25: Tiempo de procesamiento para obtener 200 valores m´aximos.
Tama˜no de la Imagen Tiempo CPU (ms) Tiempo GPU Velocidad
256X256 234.604126 18.865248 12.44
512X512 932.75 93.778946 9.95
1024X1024 3779.829102 124.333664 30.40
2048X2048 15200.907227 264.312531 57.51
4096X4096 61078.691406 701.975342 87.01
En las gr´aficas 41, 42, 43, 44 y 45 se hace una comparaci´on visual donde se representan los valores m´aximos obtenidos en cada tama˜no de imagen. De esta forma se pretende de- mostrar que al final los resultados obtenidos del descriptor de la imagen en la GPU no varian significativamente respecto a los obtenidos en la versi´on de C de la corteza visual artificial.
Figura 41: Comparaci´on de CPU y GPU en valores del vector descriptor de una imagen de 256 X 256.
En los resultados del vector descriptor de CPU y GPU para una imagen de 256X256 p´ıxeles, hubo un error promedio de 3.688 X 10−5 y una desviaci´on est´andar de 5.25 X 10−6.
Figura 42: Comparaci´on de CPU y GPU en valores del vector descriptor de una imagen de 512 X 512.
Figura 43: Comparaci´on de CPU y GPU en valores del vector descriptor de una imagen de 1024 X 1024.
En los resultados del vector descriptor de CPU y GPU para una imagen de 512X512 p´ıxeles, hubo un error promedio de 3.35 X 10−6 y una desviaci´on est´andar de 2.41 X 10−6. En los resultados del vector descriptor de CPU y GPU para una imagen de 1024X1024 p´ıxeles, hubo un error promedio de 9.2 X 10−6 y una desviaci´on est´andar de 2.67 X 10−6.
Figura 44: Comparaci´on de CPU y GPU en valores del vector descriptor de una imagen de 2048 X 2048.
En los resultados del vector descriptor de CPU y GPU para una imagen de 2048X2048 p´ıxeles, hubo un error promedio de 8.83 X 10−6 y una desviaci´on est´andar de 2.73 X 10−6.
Figura 45: Comparaci´on de CPU y GPU en valores del vector descriptor de una imagen de 4096 X 4096.
En los resultados del vector descriptor de CPU y GPU para una imagen de 4096X4096 p´ıxeles, hubo un error promedio de 7.52 X 10−6 y una desviaci´on est´andar de 2.73 X 10−6.
De acuerdo a los datos finales obtenidos de la versi´on de la corteza visual artificial en C y la versi´on en CUDA, hay un error muy poco significativo en todos los tama˜nos de imagen, y una desviaci´on est´andar min´ıma en los valores m´aximos obtenidos.
Cap´ıtulo 8. Conclusi´on y discusi´on
El pr´oposito principal de este proyecto, fu´e utilizar los paradigmas de c´omputo masivamente paralelo en tarjetas gr´aficas, para obtener un rendimiento mejorado de un algoritmo para reconocimiento de objetos. El algoritmo que se implement´o, fu´e la corteza visual artificial (Clemente et al., 2013) (CVA) para el reconocimiento de aviones. La CVA originalmente se implement´o en Matlab, donde procesa y clasifica una imagen de 896X592 p´ıxeles en 9.91 segundos. En el trabajo de esta tesis, se implement´o todo el algoritmo de la CVA en lenguaje C, y posteriormente se implement´o en CUDA C. En las pruebas del proyecto, se procesaron im´agenes de hasta 4096X4096 p´ıxeles. Una imagen de 1024X1024 p´ıxeles, que es un poco m´as grande que el tama˜no de la imagen de Matlab, la versi´on de la CVA en C logr´o procesarla en 5.79 segundos, mientras que la versi´on en CUDA lo hizo en tan solo 1/2 segundo. La velocidad del algoritmo en CUDA sobre la versi´on de C, lleg´o a ser de hasta 50x m´as r´apida en im´agenes de 4096X4096 p´ıxeles.
En general, cuando se implementan algoritmos en CUDA, primeramente se necesita trans- ferir datos de la CPU a la memoria de la GPU. Despu´es se realizan c´alculos en la tarjeta gr´afica, y al final se transfieren a la memoria de la CPU los resultados. Es conocido que las transferencias entre CPU y GPU, pueden llegar a ser el cuello de botella cuando se utiliza CUDA. La CVA de CUDA, se compone de muchas funcioneskernel, estas se han programado y estructurado de tal forma, que previo a sus llamadas no requieran realizar transferencia de datos del hu´esped al dispositivo. Es decir, los datos permanecen en la memoria del dis- positivo. Una vez que se transfiere la imagen original a la memoria en el dispositivo, los componentes de color, mapas visuales, mapas conspicuos, mapas mentales y el vector de- scriptor se calculan en la GPU. Todas las funciones de la CVA se implementaron en CUDA, a excepci´on de una que realiza un escalamiento de imagen en CPU; un proceso que se realiza al terminar el c´alculo de los mapas conspicuos, y se realiza previo a iniciar el procesamiento de los mapas mentales. En este proceso de escalamiento se da el ´unico caso, donde los datos deben transferirse de la memoria del dispositivo a la memoria del hu´esped. Y una vez que la funci´on escala las im´agenes, los resultados se transfieren de nuevo a la memoria del dispositivo para continuar con los c´alculos en la GPU.
Otra caracter´ıstica de la versi´on de la CVA en CUDA, fu´e utilizar adecuadamente la memoria compartida y la memoria constante. Se sabe, que las lecturas a memoria global de la tarjeta GPU, llegan a tomar cientos de ciclos de reloj, lo cual genera, al igual que las transferencias de memoria entre hu´esped y dispositivo, un cuello de botella en el proce- samiento de datos. En la implementaci´on en CUDA de la corteza visual artificial, se evit´o en la medida de lo posible realizar muchas lecturas a memoria global, y en algunos casos se utiliz´o la memoria compartida y la memoria constante, que leer de ellas toma tan solo unos pocos ciclos de reloj.
En los experimentos realizados para probar el desempe˜no de la corteza visual en C y en CUDA, que se muestran en el cap´ıtulo VII, se tom´o el tiempo por separado de los procesos principales que componen la CVA, tales como RGB, CMYK, HSV, opuestos al color, mapas visuales, mapas conspicuos, mapas mentales y el vector descriptor. Esto permiti´o el an´alisis del rendimiento de cada proceso. Los procesos en CUDA de RGB, HSV y CMYK, mostraron tan solo un rendimiento de 2x m´as r´apido que los mismos procesos en C, y esto aplic´o para cualquier tama˜no de imagen. Ahora, en CUDA es m´as ´optimo utilizar hilos en una dimensi´on, pero en estos algoritmos se requiri´o establecer hilos en dos dimensiones. Como conclusi´on del bajo rendimiento de estos procesos, es que la p´erdida de rendimiento para generar los hilos en dos dimensiones, no se compens´o en la fase de c´alculo, debido a la poca cantidad de c´alculos por hilo en CUDA. Por otro lado, las funciones kernel para obtener los opuestos al color, fueron en promedio 35x m´as r´apidas que las funciones de C. En tales funciones, se observ´o que los hilos lanzados en el kernel se establecieron en una dimensi´on. Tambi´en, el n´umero de p´ıxeles es factor de incremento en la velocidad entre la CPU y la GPU, para las funciones de opuestos de color. En una imagen de 256X256 p´ıxeles, la GPU procesa los opuestos rojo-verde y azul-amarillo 19x veces m´as r´apida que la CPU. Mientras que, en una imagen de 4096X4096 p´ıxeles es 45x.
En los mapas visuales de intensidad, color y forma, se obtuvo un buen rendimiento en CUDA, en promedio de 12x para im´agenes de 256X256, y un promedio de 40x para im´agenes de 4096X4096. Las velocidades de GPU que en promedio son 12x, a´un son bajas, pero es el resultado de procesar menor cantidad de datos, debido a que CUDA le toma un tiempo preparar y organizar los hilos para lanzar en la tarjeta GPU, tiempo que no es compensado en