Corso di High-Performance e Parallel Computing per l’Astrofisica

→ Europe/Rome
Chiostro di Sant'Abbondio (Como) e CNR Area Territoriale di Ricerca (Bologna)

Chiostro di Sant'Abbondio (Como) e CNR Area Territoriale di Ricerca (Bologna)

via Sant'Abbondio 12 - Como Via Piero Gobetti 101 - 40129 Bologna
Description

Il corso fornisce una competenza completa e operativa nel calcolo ad alte prestazioni e nella programmazione parallela, dal funzionamento delle architetture di calcolo moderne fino allo sviluppo, all'ottimizzazione, al debugging e al profiling di codice parallelo su sistemi multi-core, multi-nodo e accelerati da GPU. 

LE LEZIONI SI SVOLGERANNO IN LINGUA INGLESE

MODULO A — Architetture moderne, codice seriale e memoria condivisa (40h)
Obiettivi formativi: comprendere come le scelte di codice si traducano in performance sulla microarchitettura; saper portare un kernel seriale a una versione vettorizzata e cache-friendly; saper parallelizzare su nodo singolo con OpenMP gestendo correttamente la memoria condivisa; saper individuare bug di correttezza e colli di bottiglia seriali con strumenti standard.

Contenuti didattici

  • Architetture moderne (CPU)
  • Ottimizzazione del codice seriale
  • Architettura del nodo e NUMA
  • Multithreading con OpenMP
  • Debugging & Profiling I (seriale)

MODULO B — Memoria distribuita (MPI) e architetture dei cluster di calcolo

Obiettivi formativi: comprendere il modello a memoria distribuita e saper scrivere applicazioni MPI corrette ed efficienti fino al livello intermedio; padroneggiare le tecniche MPI avanzate per pattern di comunicazione complessi e I/O parallelo; saper fare debugging e profiling di applicazioni parallele multi-process

Contenuti didattici

  • Architetture dei cluster
  • MPI — base
  • MPI — intermedio
  • MPI — avanzato
  • Debugging & Profiling II (parallelo)
  • Containerizzazione per HPC

MODULO C — GPU, algoritmi e deployment (40h)

Obiettivi formativi: comprendere l'architettura GPU e saper scrivere e ottimizzare kernel di base sfruttando il memory model; saper gestire scenari multi-GPU e multi-nodo con communication libraries dedicate; saper profilare applicazioni alla scala di produzione e distribuirle in modo riproducibile.

Contenuti didattici

  • GPU I
  • GPU II (avanzata e distribuita)
  • Profiling su larga scala

 

La fee di iscrizione è di 100€ a persona per ogni modulo, i tre moduli sono pensati per essere fruibili anche separatamente.

La quota di partecipazione non comprende le spese di viaggio e di alloggio, che restano interamente a carico dei partecipanti. Sono invece inclusi nella quota il pranzo e i coffee break previsti durante tutte le giornate di lezione.

I posti disponibili sono 40 e l’ammissione in aula avverrà secondo l’ordine di registrazione. Qualora il numero di iscrizioni superi i posti disponibili, alla chiusura delle registrazioni avranno priorità dottorandi/e e giovani ricercatori/trici, sempre nel rispetto dell’ordine temporale di iscrizione. 

 

Registration
Personal Data
    • 08:45 → 09:00
      Greetings & Accounts check 15m
    • 09:00 → 11:00
      Introduction to Modern CPU architectures 2h
    • 11:00 → 11:20
      Break 20m
    • 11:20 → 13:00
      Running Model on *niX TLB, stack and heap 1h 40m
    • 13:00 → 14:00
      Lunch 1h
    • 14:00 → 15:30
      Techniques for serial code performance / 1 1h 30m
    • 15:30 → 15:50
      Break 20m
    • 15:50 → 18:00
      Hands-on session 2h 10m
    • 09:00 → 11:00
      Techniques for serial code performance / 2 2h
    • 11:00 → 11:20
      Break 20m
    • 11:20 → 13:00
      Hands-on session 1h 40m
    • 13:00 → 14:00
      Lunch 1h
    • 14:00 → 15:30
      Debugging & Profiling techniques 1h 30m
    • 15:30 → 15:50
      Break 20m
    • 15:50 → 18:00
      Hands-on session 2h 10m
    • 09:00 → 11:00
      OpenMP Introduction Shared & Private memory Threads stacks Parallel regions 2h
    • 11:00 → 11:20
      Break 20m
    • 11:20 → 13:00
      Hands-On session 1h 40m
    • 13:00 → 14:00
      Lunch 1h
    • 14:00 → 15:30
      Shared Construct (loops) 1h 30m
    • 15:30 → 15:50
      Break 20m
    • 15:50 → 18:00
      Hands-on session 2h 10m
    • 09:00 → 11:00
      OpenMP memory model threads synchronization 2h
    • 11:00 → 11:20
      Break 20m
    • 11:20 → 13:00
      Hands-On session 1h 40m
    • 13:00 → 14:00
      Lunch 1h
    • 14:00 → 15:30
      OpenMP task parallelism 1h 30m
    • 15:30 → 15:50
      Break 20m
    • 15:50 → 18:00
      Hands-on session 2h 10m
    • 09:00 → 11:00
      Debugging multi-threads codes 2h
    • 11:00 → 11:20
      Break 20m
    • 11:20 → 13:00
      Hands-On session 1h 40m
    • 13:00 → 14:00
      Lunch 1h
    • 14:00 → 15:30
      Profiling multi-threads codes 1h 30m
    • 15:30 → 15:50
      Break 20m
    • 15:50 → 18:00
      Hands-On session 2h 10m