Inicio

Semestre 2018-20

 

Nombre del curso: Herramientas de programación de alto rendimiento
Créditos: 4
Profesor: Pablo Figueroa (pfiguero@uniandes.edu.co)
Versión PDF Click Aquí

Objetivos

  • Usar herramientas de desarrollo y programación de alto rendimiento, tanto en ejemplos de laboratorio como en proyectos reales.
  • Usar herramientas de comprensión de código de proyectos de interés.
  • Usar nuevas herramientas de programación en paralelo, basadas en las tecnologías multicore de CPUs y GPUs.
  • Conocer algoritmos que hacen uso intensivo de la GPU.

Metodología

El contenido del curso se divide en temas teóricos y temas de tecnología. La teoría viene del libro guía de la materia y se cubren 4 tecnologías: Programación en línea de comandos, CUDA, OpenMPI y Python. Los trabajos individuales de los estudiantes cubren otras tecnologías y ejercicios de práctica.

Evaluación

  • 40%: Descripción de los ejemplos (4)
  • 20%: Análisis de otra tecnología no cubierta en el curso (en grupo)
  • 20%: Competencia en rendimiento
  • 20%: Trabajo final (en grupo)

Descripción de ejemplos

La descripción de un ejemplo es un documento que muestra el conocimiento adquirido sobre el lenguaje, sobre el ejemplo en cuestión y sobre su ejecución con base en los conceptos básicos. El documento tiene la siguiente tabla de contenido:

  • Clasificación, de acuerdo a la taxonomía de Flynn
  • Descripción de tareas, unidades de ejecución, elementos de procesamiento, balanceo de carga, sincronización,
  • Análisis de tiempos
  • Análisis de comunicación
  • Patrones aplicados (hasta los vistos en el curso al momento de la evaluación)
  • Análisis de líneas de código (Diigo)
  • Bitácora de pruebas y ejemplos adicionales
  • Posibles mejoras (idealmente acompañado con un patch)

Análisis de otra tecnología

Hay muchas tecnologías para desarrollo de aplicaciones de alto rendimiento, y el objetivo en este caso es analizar otras tecnologías de manera similar a la forma en la cual se analiza en el curso. El análisis debe incluir

  • Una breve introducción de la tecnología y su historia
  • Descripción de la tecnología (extensión a un lenguaje, lenguaje, framework, …)
  • Descripción de las herramientas de trabajo y análisis de resultados
  • Un ejemplo detallado
  • Bitácora del análisis de la tecnología
  • Videos cortos (no mas de 10 minutos) con la presentación de dicha tecnología

Esta es una lista inicial de tecnologías. Uds pueden proponer otras.

  • C++AMP
  • PowerShell (Windows)
  • OpenACC
  • OpenMP
  • Perl, en el contexto de problemas de bioinformática
  • Paralelismo y concurrencia en Java
  • OpenCL
  • Aparapi (ATI)
  • Direct Compute (Windows)

Puede verse también el problema desde el punto de vista de software existente de alto rendimiento, implementado en otras tecnologías. Ejemplos son:

  • Simuladores de clima
  • Genomics, Proteomics
  • SETI at Home
  • Boinc
  • Fold it
  • Ejemplos específicos de GPGPU

Competencia en rendimiento

Vamos a competir en mejorar el rendimiento del código ejemplo de GPU, el simulador desarrollado por Diego Rodriguez. el trabajo consiste en hacer modificaciones al código de Diego, medir el rendimiento de los cambios y entregar al final un informe que contenga:

El acceso a Gambita es restringido, por lo que se espera que uds. tomen turnos para su uso.

Trabajo final

Se propone la solución a un problema de alto rendimiento, en cualquier dominio y con cualquier herramienta o tecnología. Algunos problemas sugeridos son:

  • Simulación distribuida de pilotaje de aviones
  • Simulación distribuida de tráfico urbano
  • Visualización en astrofísica
  • (Omar Lopez) Mejora de desempeño de un código de Smoothed Particle Hydrodynamics (SPH) en GPU
  • (Omar Lopez) Visualización paralela de un vuelo virtual

Bibliografía

  • Timothy G. Mattson, Beverly A. Sanders, Berna L. Massingill. Patterns for Parallel Programming. Addison-Wesley Professional; 1 edition (September 25, 2004). Libro Guia
  • UMunshi, Gaster, Mattson, Fung, Ginsburg. OpenCL Programming Guide. Addison-Wesley. 2012
  • Sanders, Kandrot. CUDA By Example. Addison-Wesley. 2011