Obiettivi didattici

Il corso introduce alle tecniche di programmazione parallela e distribuita, e alle moderne architetture hardware e software per il calcolo scientifico ad alte prestazioni. Il corso introduce anche ai metodi iterativi distribuiti per la simulazione di problemi numerici. Come linguaggio di programmazione si utilizza Julia, linguaggio dinamico di nuova concezione per il calcolo scientifico.

Programma del corso

Breve introduzione al linguaggio Julia per calcolo scientifico. Introduzione alle architetture parallele. Principi di progetto di algoritmi paralleli. Tecniche di programmazione parallela e distribuita con Julia. Primitive di comunicazione e sincronizzazione: paradigma MPI. Linguaggi basati su direttive: OpenMP. Metriche di prestazione dei programmi paralleli. Operazioni matriciali e sistemi lineari densi: Cenni a BLAS, LAPACK, scaLAPACK. Sistemi lineari sparsi. Cenni a CombBLAS, GraphBLAS. Sviluppo di un progetto collaborativo: Simulazione di terremoti, LAR parallelo.

Linguaggi di programmazione

Julia

Risorse di calcolo

Si utilizzerĂ  per scopi didattici il superserver NVIDIA DGX-1 del Dipartimento di Matematica e Fisica, integrato dalle risorse del laboratorio didattico di Matematica e del Laboratorio di Scienze Computazionali come punti di accesso.

Materiale didattico

  1. Lecture slides and diary

  2. Learning Julia

  3. Blaise N. Barney, HPC Training Materials, per gentile concessione del Lawrence Livermore National Laboratory's Computational Training Center

  4. Grama, Gupta, Karypis, Kumar Introduction to Parallel Computing. Addison-Wesley, Harlow, 2003. Second edition. ISBN:0201648652

  5. J. Dongarra, J. Kurzak, J. Demmel, M. Heroux, Linear Algebra Libraries for High- Performance Computing: Scientific Computing with Multicore and Accelerators, SuperComputing 2011 (SC11)

  6. Antonio DiCarlo, Alberto Paoluzzi, and Vadim Shapiro, Linear algebraic representation for topological structures, CAD, 2014