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

  1. Introduzione ai CVS (Control Version Systems), in particolare a Git, GitHub.
  2. Introduzione al linguaggio Julia per calcolo scientifico.
  3. Introduzione alle architetture parallele.
  4. Principi di progetto di algoritmi paralleli.
  5. Tecniche di programmazione parallela e distribuita con Julia.
  6. Array distribuiti in Julia: DistributedArrays.jl.
  7. GPU Computing con Julia: JuliaGPU
  8. Primitive di comunicazione e sincronizzazione: MPI.jl
  9. Metriche di prestazione dei programmi paralleli.
  10. Matrici e sistemi lineari densi: LinearAlgebra.jl, BLAS, LAPACK
  11. Sistemi lineari sparsi. SparseArrays.jl, CombBLAS, GraphBLAS
  12. Sviluppo di un progetto collaborativo: LinearAlgebraicRepresentation.jl

Linguaggi di programmazione

Julia: "A fresh approach to technical computing"

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. Blaise N. Barney, HPC Training Materials, per gentile concessione del Lawrence Livermore National Laboratory's Computational Training Center

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