Clasificación Tisular en GPU: aceleración y optimizaciones - Ruiz Sánchez, Antonio (Servicio de Publicaciones y Divulgación Científica, 2015)
Desde hace una década, los procesadores gráficos o GPUs vienen ganando protagonismo en la computación de altas prestaciones, contribuyendo a la aceleración de miles de aplicaciones en multitud de áreas de la ciencia. Pero más que esta conquista, lo que ha hecho singular al movimiento GPGPU ha sido la vía para su consecución, ofreciendo tecnología popular, barata y notablemente arropada. Como resultado, la supercomputación está hoy al alcance de cualquier usuario y empresa, democratizando un sector hasta entonces circunscrito a unos pocos centros elitistas. El auge de las GPUs en los entornos de altas prestaciones ha generado un reto a la comunidad de desarrolladores software. Los programadores están habituados a pensar y programar de manera secuencial, y sólo una minoría se atrevía hace 10 años a adentrarse en este mundo. La programación paralela es una tarea compleja que exige otras habilidades y modelo de razonamiento, además de conocer nuevos conceptos hardware, algoritmos y herramientas de programación. Poco a poco, esta percepción ha ido cambiando gracias a la aportación de aquellos que, conscientes de la dificultad, quisieron aportar su granito de arena para facilitar esta transición. El trabajo de esta tesis recoge este espíritu. Planteamos nuevos diseños e implementaciones de algoritmos en el ámbito de la biocomputación para evaluar el rendimiento de las GPUs más destacadas durante la última década, desde equipos con una única GPU hasta supercomputadores de 32 GPUs. En cada uno de los problemas de biocomputación se han analizado todas las características relevantes de la GPU que permiten exprimir su gran potencial, para así presentar de una manera didáctica y rigurosa un estudio pormenorizado de los detalles y técnicas de programación más acordes a cada tipo de algoritmo. Cronológicamente, la aparición de la arquitectura de cálculo paralelo CUDA para GPUs es un hito de especial importancia en la programación de algoritmos de propósito general en GPUs. Nuestro trabajo comenzó en la era pre-CUDA con una aplicación de detección de círculos basada en la transformada de Hough y un algoritmo de detección del tumor neuroblastoma. Sus implementaciones explotan la GPU desde una perspectiva más artesanal, empleando un gran abanico de unidades funcionales de la GPU. Para ello fueron necesarios buenos conocimientos del cauce de segmentación gráfico y ciertas dosis de creatividad. Lo habitual en aquella época era aprovechar casi de forma exclusiva los procesadores de píxeles, al ser los más numerosos y mostrar ya claros indicios de escalabilidad. Entre tanto, nuestro estudio se dedicó a mostrar el potencial de otros recursos menos populares, como los procesadores de vértices, el rasterizador (conversión de polígonos en píxeles) y las unidades de blending (mezclado de contenidos en pantalla). Con la irrupción de CUDA, nuestra atención se dirigió a aplicaciones más exigentes, como el registro de imágenes o el cálculo de los momentos de Zernike para caracterizar regiones tisulares. Completamos también nuestro estudio del neuroblastoma, para poder así contrastar las facilidades aportadas por CUDA y sus posibilidades de optimización. Respecto a las arquitecturas gráficas objeto de nuestro análisis, comenzamos nuestra andadura con modestas GeForce, prosiguiendo con Quadro de gama alta, y concluyendo con Tesla de propósito general, justo donde muchos se iniciaron en el mundo GPGPU para tomar el relevo. La longevidad del algoritmo de detección de tumores nos ha permitido comparar evolutivamente todas estas arquitecturas, el registro de imágenes, ilustrar el beneficio de apoyarse en una popular librería como cuFFT, y los momentos de Zernike, desvelar las exigencias para optimizar el código en generaciones venideras (en nuestro caso, Fermi y Kepler). La exploración de este amplio abanico de posibilidades, tanto en la vertiente software como en la diversidad de modelos hardware que nos han acompañado, desemboca en un sinfín de aportaciones que, además de contribuir a una aceleración de hasta dos órdenes de magnitud en comparación con CPUs de su misma gama, han permitido que el trabajo de esta tesis siente las bases de otras muchas líneas de investigación que han dado crédito y continuidad a nuestro esfuerzo.
Keywords: Computación de altas prestaciones - Tesis doctorales; GPU; CUDA; Biocomputación; Paralelismo; Supercomputación