Pruebas
Para comparar el prototipo diseñado e implementado, se compararon los tiempos de filtrado de una solución tradicional implementada serialmente en CPU.
Con el fin de configurar un escenario de pruebas comparable entre las dos soluciones, se decidió implementar el algoritmo de convolución en CPU como una extensión del prototipo final. Esto asegura que se estén midiendo tiempos exclusivamente de el proceso de convolución; se podría haber comparado contra la implementación de filtrado de ITK, pero esto habría implicado un menor control del entorno de pruebas, y un tiempo mayor en la ejecución de las mismas.
Implementación convolución CPU
Se decidió implementar dos algoritmos de convolución serial en CPU:
-
Convolución trivial
-
Convolución separable
Estos dos algoritmos implementados permitieron ver más claramente la diferencia de complejidad algorítmica (en tiempo de ejecución) entre la convolución trivial y separable. Los dos fueron implementados de manera serial en C++.
Aunque se implementaron estos dos algoritmos, solo se ejecutaron sobre datos de imágenes de dos dimensiones, ya que la representación de datos era la más simple y que menos tiempo consumía en cuanto a desarrollo. El énfasis de CUDAlicious es en el prototipo CUDA y no en la implementación de las pruebas, por ello se decidió no gastar demasiado tiempo en la implementación en CPU.
Entorno de pruebas
Con el fin de tener resultados comparables entre sí, los datos de prueba se limitaron a imágenes en dos dimensiones, a pesar de que el prototipo implementado utilizando CUDA soporte otras dimensionalidades. El filtro aplicado fue el de difuminado Gaussiano, en versión separable y no separable, con un tamaño fijo de 3x3 pixeles.
Los tamaños de las imágenes de prueba están descritos en la tabla 3, todas las unidades de tamaño están en pixeles.
-
Nombre imagen
|
Ancho
|
Alto
|
Tamaño total
|
W8.png
|
2048
|
1088
|
2228224
|
W82.png
|
5120
|
2816
|
14417920
|
W83.png
|
6016
|
3392
|
20406272
|
W84.png
|
6400
|
3584
|
22937600
|
Tabla 3: Descripción datos de prueba
Las pruebas se ejecutaron todas en el equipo de desarrollo principal (laptop Sager NP8130), ya que el equipo se encuentra modificado con respecto a la versión original (debido a una actualización del procesador del mismo) se describen las especificaciones técnicas de CPU y GPU en la tabla 4.
-
Tipo
|
Modelo
|
Frecuencia/núcleo
|
Cantidad núcleos
|
Memoria
|
CPU
|
Intel 2720QM
|
2200Mhz / 3300Mhz
|
4 / 8
|
8192MB
|
GPU
|
Nvidia GTX 460m
|
675Mhz
|
192
|
1536MB
|
Tabla 4: Descripción equipo de prueba
El procesador del equipo de prueba cuenta con la tecnología HyperThreading [19], debido a esto, aunque sólo cuenta con cuatro núcleos reales el sistema operativo reconoce ocho. Por otra parte, el mismo procesador también tiene la tecnología TurboBoost [20], que incrementa la frecuencia de reloj del mismo dependiendo de la carga bajo la que se encuentre; la frecuencia base para este modelo específico es 2200Mhz, y la mayor frecuencia posible bajo carga de cada núcleo es 3300Mhz.
La GPU utilizada es de la generación fermi [21] de Nvidia, por tanto la frecuencia de la misma se mantiene estable (675Mhz) mientras se encuentre bajo carga.
Resultados de pruebas
La ejecución de los archivos de pruebas en el entorno arrojó los datos descritos por la gráfica 1.
Gráfica 1: Resultados prueba
Los tiempos graficados son el promedio de tres ejecuciones consecutivas de cada prueba, con el fin de disminuir la incertidumbre con respecto a la frecuencia de la CPU.
Utilizando la herramienta Nvidia Visual Profiler [26], se puede hacer un mejor análisis sobre el rendimiento de CUDAlicious.
En la gráfica 2 se aprecia el resultado que dá la herramienta cuando se ejecuta la versión separable en 2D. Nvidia Visual Profiler solo tiene en cuenta las funciones que se ejecutan en la tarjeta gráfica, por tanto no se verá reflejado allí nada que se ejecute en el procesador.
Gráfica 2: Resultados Nvidia Visual Profiler CUDA Sep
Con respecto a la utilización de los recursos computacionales de la GPU, en las gráficas 3 y 4 se aprecia la utilización de los núcleos de la GPU en la prueba separable y no separable respectivamente.
En los únicos casos en los que la actividad de los multiprocesadores de la GPU aparece en “n/a” es en las operaciones de copia entre la CPU y la GPU. El resto de operaciones fluctúan entre 91.6% y 100% de utilización.
Gráfica 3: Utilización de GPU CUDA Sep
Gráfica 4: Utilización de GPU CUDA Non-Sep
Dostları ilə paylaş: |