class: inverse, center, middle count: false background-image: url(htop.png) # Computación Paralela ## Introducción al laboratorio Carlos Bederián, [carlos.bederian@unc.edu.ar](mailto:carlos.bederian@unc.edu.ar) --- # `*this` 1. Gamer, hardware enthusiast 2. Pasaron cosas... 3. Hombre orquesta - Research software engineer - Administrador de clusters - Líder técnico CCAD-UNC - Profesor en FAMAF 4. En recuperación Temas para charlar: - Hardware moderno - Software de HPC (C, C++, Fortran...) - Performance Engineering - Ops --- # Comunicación Tratemos de mantener las consultas en público para evitar duplicación: - Lista de correo `cp2020-famaf@groups.io` - Alta latencia - Persistencia - Canal `#cp2020` en Slack FAMAF - Más baja latencia - Mensajes volátiles - Nico puede poner emojis de reacción Si todo falla... - Email directo a mí o a Nico --- # Edición 2020 Situación: - Tenemos gran cantidad de alumnos remotos Problema: - [Charlie no prepara nada y prefiere hacer live coding](https://www.youtube.com/watch?v=j0XBlNSxyrw) - Los slides sólos pierden mucha información Solución: - ¿Edición colaborativa de alguna wiki de Computación Paralela? --- # Formato de las clases 1. (Opcional) Charla sobre técnicas varias - Por necesidad para hacer los labs - A pedido para rascar alguna curiosidad 2. Consulta sobre los labs --- # Formato del laboratorio - Relativamente poco código que tocar con muchas sutilezas - Trabajo de a ***dos*** - Ideal (pero estresante): Pair programming - Atacar ***un*** único problema todo el cuatrimestre - Cuatro laboratorios distintos sobre el problema --- # Evaluación La nota de la materia surge del laboratorio, no hay exámenes teóricos. - Presencial: Presentación al final de cada laboratorio - Remoto: Informe y código al final de cada laboratorio - Problemas: Alta latencia para feedback, se pierden las presentaciones Posgrado (extra) - Al final del curso, aplicar lo aprendido a un problema adicional (generalmente del trabajo/doctorado) --- # Grupos *Idealmente* cada grupo de **dos personas** tiene: - **Un** alumno de computación - Experiencia en programación de bajo nivel - Flojo en ciencia experimental (generalmente) - **Un** alumno de otras ciencias - Experiencia en ciencia experimental - Flojo en programación de bajo nivel (generalmente) - Grupos monotemáticos: Presten mucha atención a las presentaciones **Tienen que estar armados la próxima clase**. --- # Los cuatro laboratorios 1. Bases, optimizaciones sencillas - Jugar con los compiladores - Crear infraestructura para probar rápido más tarde 2. Vectorización - Exprimir un core - Intrinsics, ¿ISPC? 3. Paralelización - Utilizar todos los cores sin morir en el intento - OpenMP 4. GPGPU - Portar código para que corra en una placa de video - CUDA, ¿OpenCL?, ¿SYCL? --- # Programas a mejorar Simulaciones mínimas en C y C++ con patrones comunes. - Complejidad variable para elegir según capacidad técnica - Patrones varios para elegir según necesidad - Disponibles para ojear en página de la materia (o en edición anterior hasta que actualice) --- # Ecuación del calor Simula la difusión de calor desde un conjunto de fuentes con métodos iterativos. - Dos pasos por iteración 1. Map: Promedio pesado de vecinos de cada elemento de la matriz para calcular iteración de Jacobi o Gauss-Seidel 2. Reduce: Calcular criterio de convergencia - Complejidad: Baja --- # Propagación de luz Simula transporte de luz en tejidos utilizando Monte Carlo. Cada fotón rebota al azar en distintas capas hasta ser absorbido. - Problemas cuando se quiere hacer paralelo: - Generación masiva de números aleatorios - Balance de carga - Generación de histogramas - Complejidad: Media --- # Modelo de Ising Simulación de interacción de espines en una estructura cristalina. - Dos pasos por iteración 1. Map: Interacción **estocástica** con los vecinos 2. Reduce: Calcular estadísticas del sistema - Complejidad: Media --- # Navier-Stokes Simulación de dinámica de fluidos en tiempo real. - Tres pasos por iteración 1. Input 2. Actualización de velocidad 3. Actualización de densidad - Versión gráfica! - Más código que el resto de los proyectos - Complejidad: Alta --- # Sandpile model Modelo estocástico de criticalidad auto-organizada. Pilas de arena descargan granos hacia sus costados al azar. - Altamente acoplado - Uso pesado de RNG - Mucho margen para optimización, difícil de extraer - Complejidad: Alta --- # Summed area table / Integral Image Para una matriz, calcular otra de tamaño idéntico donde: `\( S_{n,m} = \sum_{i=0}^{n}\sum_{j=0}^{m} M_{n,m} \)` Se utiliza para algunos algoritmos de computer vision (e.g. Viola-Jones), pero no forman parte del proyecto. - Aparentemente sencillo - Difícil de optimizar en todos los laboratorio, pocas soluciones buenas - Complejidad: Alta --- # Bring your own code Versión (¿reducida?) de código que les sirva o interese. Mini-benchmarks de HPC (probablemente ya optimizados?) - ECP Proxy Applications - UK Mini-App Consortium Sea la idea que sea, revisarlas con Charlie para ver patrones y juzgar dificultad --- # Hardware donde correr - `zx81` y `jupiterace` de FAMAF - Dual Xeon E5-2620 v3 (por ahora) - 128GB RAM - GPUs (a determinar) - Recursos compartidos entre todos los usuarios --- # Reglas de convivencia - Uso de SLURM para encolar trabajos - No correr fuera de la cola de trabajos - ...o hay tabla - Limitar el tiempo de ejecución y las barridas de parámetros si tomarían mucho tiempo - ...o hay tabla - Tip: Correr mucho antes del final del laboratorio