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. 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. McCool, Reinders, and Robison, Structured Parallel Programming: Patterns for Efficient Computation, Morgan Kaufmann, 2012

  4. Avik Sengupta, Julia High Performance: Optimizations, distributed computing, multithreading, and GPU programming with Julia 1.0 and beyond, 2nd Edition, Pakt>, 2019

  5. Ivo Balbaert and Adrian Salceanu, Julia 1.0 Programming, Complete Reference Guide, Pakt>, 2019