Tutorial CUDA: «Programación de la GPU con CUDA. Una alternativa para la computación de altas prestaciones».
Manuel Ujaldón (Universidad de Málaga) y Francisco Igual (Universidad Jaume I)
Resumen: Tras una década de evolución hacia la computación de propósito general, la GPU se ha consolidado como plataforma alternativa para la ejecución de multitud de aplicaciones científicas con una envidiable relación rendimiento/coste.
A lo largo de este tutorial estudiaremos el paradigma CUDA ideado por Nvidia para la programación de sus GPUs, y nos familiarizaremos con sus distintas facetas: sintaxis, compilación, depuración, optimización y análisis de rendimiento. El ciclo de desarrollo de un programa CUDA se ilustrará trabajando sobre una serie de ejemplos que el programador deberá ir refinando sucesivamente con objeto de construir kernels cada vez más eficientes.
En la recta final del tutorial, analizaremos el papel desempeñado por CUDA como alternativa para la computación de altas prestaciones, comparando el rendimiento que ofrece sobre algunas aplicaciones científicas y biomédicas frente a otros modelos de programación basados en memoria compartida y distribuida como OpenMP y MPI, respectivamente.
Requisitos previos: Es necesario estar familiarizado con la sintaxis y estructura de un programa escrito en lenguaje C, así como tener nociones básicas de la arquitectura de un procesador gráfico actual (principalmente, la organización en multiprocesadores y cores, y la jerarquía de memoria de la GPU).
Aunque repasaremos todos los conceptos del paradigma CUDA desde el principio, el tutorial se aprovecha más y mejor si el programador ya se encuentra familiarizado con conceptos como grids, kernels, hilos y bloques de hilos en CUDA. En este sentido, este tutorial pretende dar continuidad al que ya impartimos el año pasado durante la I Escuela de Invierno CAPAP-H de Alicante, donde estudiamos la arquitectura CUDA y sentamos las bases para su programación.
Tutorial. «Introducción a OpenCL».
Basilio Fraguela y Diego Andrade (Universidad de A Coruña)
Resumen: La irrupción en el panorama computacional del uso de arquitecturas heterogéneas ha traído consigo a una gran variedad de lenguajes, librerías y entornos de distintos fabricantes orientados a la programación de sus sistemas específicos. Como respuesta a esta situación se ha desarrollado el estándar abierto OpenCL, el cual define una interfaz para un runtime y un lenguaje de programación genéricos válidos para este tipo de sistemas. Las empresas más importantes en el ámbito de la computación heterogénea no sólo se han adherido ya a este estándar sino que han desarrollado implementaciones para sus sistemas, haciendo así efectivas las ventajas de portabilidad que promete.
En este tutorial introduciremos las abstracciones de los modelos de arquitectura y comunicación sobre los que se sustenta OpenCL así como los aspectos fundamentales de su interfaz y de su lenguaje de programación. El tutorial finalizará con una sesión de prácticas guiadas en la que nos familiarizaremos con los conceptos anteriores.
Requisitos previos: Es necesario estar familiarizado con el lenguaje C. Aunque se aprovecha mejor el curso si se conoce a alto nivel la arquitectura de las tarjetas gráficas y, en menor medida, conceptos de CUDA, dichos conocimientos no son obligatorios en modo alguno.