Plan 95 Adecuado ASIGNATURA: COMPUTACIÓN PARALELA CON PROCESADORES GRÁFICOS CODIGO: 95-0409 DEPARTAMENTO: ELECTRÓNICA CLASE: ELECTIVA DE ESPECIALIDAD ÁREA: TÉCNICAS DIGITALES HORAS SEM.: 4 HS. HORAS / AÑO: 64 HS. Fundamentación: Fundamentar la asignatura según su propósito general, en el marco del plan de estudios y desde su aporte para la formación ingenieril y el perfil del egresado. La asignatura busca introducir a los alumnos en la programación de procesadores gráficos (GPUs) en aplicaciones de propósito general. La gran capacidad de cálculo de los GPUs, acompañado de nuevas arquitecturas de hardware más la aparición de modelos de programación adecuados para implementar aplicaciones de propósito general, han transformado a este tipo de procesadores en una herramienta de sumo interés para la aceleración de algoritmos de cálculo intensivo. En los últimos años, la comunidad científica ha adoptado esta herramienta para la aceleración de distintas aplicaciones científicas, y de procesamiento de señales e imágenes. Los resultados difundidos demuestran que es una herramienta muy valiosa en ese sentido, que será de utilidad a aquellos profesionales que trabajen con técnicas de procesamiento intensivo que requieran ser optimizadas y paralelizadas. Objetivos: Comprender las limitaciones de las arquitecturas de procesadores actuales, y su tendencia hacia la computación paralela. Comprender la arquitectura de procesadores gráficos actuales, y su modelo de programación paralela. Aprendan las herramientas de programación de NVIDIA-CUDA, así como también técnicas de optimización de código en GPU. Desarrollar software paralelo y optimizado para NVIDIA-CUDA, en aplicaciones de propósito general. Programa sintético: Arquitecturas Paralelas. Paralelización de Código en CPU.
Paralelización de Código en GPU. Arquitectura de los Procesadores Gráficos. Introducción a C-CUDA. Optimización de código CUDA. Ejemplos de Aplicación. Programa analítico: Unidad 1: Introducción a Arquitecturas Paralelas Tendencias tecnológicas en arquitecturas de procesadores. Problemas de consumo, memoria. Paralelismo en microprocesadores, distintos niveles de paralelismo. Arquitectura paralelas en CPU y GPU, comparación. Unidad 2: Paralelización en CPU Micro-arquitectura de CPU. Optimización en CPU: SIMD, librerías Intel, icc. Programación multicore open- MP. Unidad 3: Unidades de Procesamiento Gráfico (GPU) Modelo de programación paralela CUDA. Kernels, jerarquías de threads y memoria, mecanismos de sincronización. Arquitectura de NVIDIA GPU, unidades de ejecución, utilización de recursos, accesos a memoria unificados. Introducción a C-CUDA y al entorno de desarrollo (Kdevelop, Cmake, Svn, Cuda SDK y Cuda Toolkit). Unidad 4: Optimización de código en GPU Métricas de evaluación de performance. Optimizaciones de memoria: global vs. Shared. Técnicas de reducción en Shared Memory. Configuración de ejecución: utilización de warps, tamaño de bloques y grilla de ejecución. Mecanismos de Sincronización y detección de carreras críticas (Race-condition problems). Instrucciones avanzadas. Multi-GPU. Debugging (cuda-gdb). CUDA profiler. Análisis de utilización de recursos e identificación de problemas en el uso de los mismos. Unidad 5: Ejemplos de Aplicación Librerías matemáticas GPU (CUBLAS-CUFFT). Montecarlo GPU. Ray-tracing en GPU. Comparación de algoritmos optimizados CPU y GPU (aceleración). Propuestas para Trabajo Final, y estudio de su potencial paralelización.
Estrategias Metodológicas: Modalidades de enseñanza empleadas según tipo de actividad (teórica-práctica) Las clases teóricas se presentarán mediante distintas exposiciones orales acompañadas de proyección de powerpoint. Las actividades prácticas se realizarán en laboratorio de Pcs donde los alumnos recibirán una introducción de las distintas herramientas a utilizar, y se le brindarán códigos de ejemplo para la comprensión de los temas vistos en las clases teóricas. A su vez se desarrollarán clases teórico prácticas donde se analizarán ejemplos completos de aplicación. Esto brindará al alumno las herramientas necesarias para poder realizar los proyectos requeridos para la aprobación. Recursos didácticos para el desarrollo de las distintas actividades (guías, esquemas, lecturas previas, computadoras, software, otros) Para el desarrollo de la materia se utilizará el servidor Fermi del departamento de electrónica. El mismo cuenta con la GPU Nvidia GTX-480 y un microprocesador Intel core i5. El acceso al servidor será a través de terminales ssh en uno de los laboratorios del departamento, y la ejecución en GPU se administrará a través de la cola de ejecución de una herramienta de cluster (Torque Cluster Tools). También se solicitará la utilización de uno de los servidores donados por Intel para las implementaciones en CPU. Metodología de evaluación: Modalidad Al ser una materia que busca enseñar una herramienta de aplicación práctica, las evaluaciones se harán a través de dos trabajos prácticos y un proyecto final. Ya que de esta forma el alumno logrará realmente aprender a utilizar las herramientas y técnicas desarrolladas, y poder resolver aquellos inconvenientes que enfrentará el alumno cuando utilice esta herramienta en su carrera como profesional. Requisitos de regularidad Para finalizar el cursado de la materia se deberán aprobar dos trabajos prácticos: 1. TP Nº 1: El alumno deberá desarrollar un kernel de cuda para paralelizar algoritmos propuestos, comparando su performance con el mismo algoritmo implementado en open-mp. Deberá presentarse el código fuente con sus correspondientes archivos de cmake para compilación, los mismos deberán estar acompañados por un informe en el cual se incluye la comparativa entre ambas implementaciones. 2. TP Nº 2: El alumno desarrollará una implementación paralela de un algoritmo utilizando las técnicas de optimización específicas de la arquitectura. Se deberá comparar con un algoritmo equivalente para openmp, y lograr un factor de aceleración mayor al mínimo propuesto. La entrega del trabajo práctico tendrá el mismo formato que el TP Nº 1.
Requisitos de aprobación Para aprobar la materia se deberá presentar un trabajo final que consistirá en desarrollar un algoritmo de cálculo en cuda, en aplicaciones potencialmente paralelizables. El cual deberá lograr un factor de aceleración mayor a 10x respecto de su versión CPU optimizada. Los benchmark de performance se deberán realizar en el servidor Fermi disponible en el departamento de electrónica. Articulación Horizontal y vertical con otras materias: La materia se articula verticalmente con las materias del área de digitales, en particular con informática II y Técnicas Digitales II. Ya que utiliza como base las habilidad de programación adquiridas en informática II, y los conceptos de arquitecturas de procesadores de Técnicas Digitales II, para utilizar y comprender las arquitecturas de los procesadores gráficos modernos. La materia favorece la articulación horizontal con materias relacionadas con el procesamiento de señales, imágenes y la optimización de código para cálculo, como lo pueden ser Técnicas Digitales III y Procesamiento Digital de Imágenes; ya que permite la implementación de las ténicas aprendidas en las mismas, en los procesadores gráficos desarrollados durante el curso de esta materia. CRONOGRAMA ESTIMADO DE CLASES Unidad Temática Duración en hs cátedra Introducción a Arquitecturas Paralelas 4 Paralelización en CPU 8 Unidades de Procesamiento Gráfico 16 Optimización de código en GPU 16 Ejemplos de Aplicación 16 Bibliografía: Bibliografía Obligatoria: David B. Kirk y Wen-mei W, 2010, Programming Massively Parallel Processors. Estados Unidos, Editorial Morgan Kaufman. Wen-mei W. Hwu, 2011, GPU Computing Gems (Emerald Edition). Estados Unidos, Editorial Morgan Kaufman. Peter Pacheco, 2011, An Introduction to Parallel Programming. Estados Unidos, Editorial Morgan Kaufman.
Bibliografía Complementaria: NVIDIA, 2010, NVIDIA CUDA C Programming Guide 3.2. Santa Clara( Estados Unidos), NVIDIA Corporation. NVIDIA, 2010, Cuda C Best Practices Guide 3.2. Santa Clara (Estados Unidos), NVIDIA Corporation. NVIDIA, 2009, Fermi: NVIDIA's Next Generation CUDA Compute Architecture. Santa Clara(Estados Unidos), NVIDIA Corporation. Correlativas: Para cursar: Cursada: Técnicas Digitales II Aprobada: Informática II Análisis de Señales y Sistemas Para rendir: Aprobada: Técnicas Digitales II