Mejoramiento del tiempo de ejecución de un núcleo Lattice-Boltzmann utilizando la arquitectura NVIDIA G80 - Carrillo Lindado, Snaider Jose; Siegel, Jakob; Li, Xiaoming (Tecnura, 2009)
Las sentencias de control utilizadas en el entorno de programación de las tarjetas gráficas de video (GPUs), tales como sentencias condicionales e iterativas, presentan problemas de concurrencia al momentos de ser ejecutadas debido a que tienden a minimizar el nivel de ocupación, el cual es una medida que nos permite establecer el número de procesos que se están ejecutando de forma concurrente en las GPUs. A diferencia de las unidades de procesamiento de datos tradicionales presentes en un microprocesador de propósito general, una GPU no puede ceder el control de flujo de datos a la CPU debido a que actualmente no existe un mecanismo que permita dicho control de flujo sin comprometer la integridad de los datos procesados en dichas arquitecturas. En este artículo se proponen y evalúan dos nuevas técnicas de optimización a nivel de instrucciones enfocadas a hacer un mejor uso de los recursos de tipo hardware de las GPUs, en la arquitectura NV-DIA G80. Estás técnicas llamadas Loop splitting and branch splitting incrementan de forma controlada la redundancia de código, lo cual puede ser considerado como "no óptimo" en una arquitectura convencional como la CPU; sin embargo en la arquitectura multiprocesador NVIDIA G80 dicha redundancia se ve reflejada en el incremento de la ocupación de sus multiprocesadores y en un aumento del paralelismo de los programas ejecutados en este tipo de arquitectura. Los resultados obtenidos a partir del banco de pruebas, basados en el algoritmo del método de Lattice Boltzmann (LBM), muestra que estas técnicas incrementan la ocupación y el paralelismo de la arquitectura NVIDIA G80 comparado con la ejecución de la versión non-splitting del mismo algoritmo.