Calcolo Parallelo e Distribuito

Lezioni: prof. Alberto Paoluzzi

a.a. 2021/22

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 tecnico-scientifico.

Programma del corso

  1. Introduzione al linguaggio Julia per calcolo tecnico- scientifico.
  2. Architetture parallele.
  3. Principi di progetto di algoritmi paralleli.
  4. Metriche di prestazione dei programmi 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. Matrici e sistemi lineari densi: LinearAlgebra.jl, BLAS, LAPACK
  10. Grafi e Sistemi lineari sparsi. SparseArrays.jl, CombBLAS, GraphBLAS
  11. Sviluppo di un progetto collaborativo: LinearAlgebraicRepresentation.jl

Linguaggi di programmazione

The Julia Programming Language

Risorse di calcolo

Si utilizzerà https://juliahub.com/lp/ “The simplest/fastest code to cloud platform for high performance computing”; il superserver NVIDIA DGX-1, del Laboratorio di Scienze Computazionali.

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. Avik Sengupta, Julia High Performance: Optimizations, distributed computing, multithreading, and GPU programming with Julia 1.0 and beyond, 2nd Edition, Pakt>, 2019

  4. Julia Programming for Nervous Beginners