87945 - SOFTWARE AND COMPUTING FOR NUCLEAR AND SUBNUCLEAR PHYSICS

Anno Accademico 2021/2022

  • Docente: Daniele Bonacorsi
  • Crediti formativi: 6
  • SSD: FIS/01
  • Lingua di insegnamento: Inglese
  • Moduli: Daniele Bonacorsi (Modulo 1) Daniele Bonacorsi (Modulo 2) Lorenzo Rinaldi (Modulo 3)
  • Modalità didattica: Convenzionale - Lezioni in presenza (Modulo 1) Convenzionale - Lezioni in presenza (Modulo 2) Convenzionale - Lezioni in presenza (Modulo 3)
  • Campus: Bologna
  • Corso: Laurea Magistrale in Physics (cod. 9245)

Conoscenze e abilità da conseguire

At the end of the course the student will learn the basic concepts of programming and modern scientific computation, as they are currently used in several physics fields. He/she will have an understanding of the major software development techniques and strategies and an understanding of the various computational frameworks, database, data maintenance and collection. By the end of the course, the student will be able to solve advanced problems in scientific software design for nuclear and subnuclear physics that will be developed as small group projects.

Contenuti

MODULO 1: Stili e standard di programmazione. Design e sviluppo software. Tecniche e paradigmi di programmazione. Linguaggi di programmazione. Linguaggi compilati e interpretati. Paradigmi object-oriented. Programmazione funzionale. Punti di forza e debolezza, domini di applicazione, metodologie di diversi linguaggi di programmazione (in uso nella fisica contemporanea). L’esempio di Python, anche in ambienti multi-linguaggio. Come scrivere, debuggare, documentare, condividere, mantenere nel tempo un progetto software (software versioning, software verification and testing, life-cycle modeling, software maintenance, selected software engineering methods and tools). Infrastrutture e risorse di calcolo. Databases relazionali. Gestione dati: formato, riduzione, replicazione, manipolazione. File systems. Da singoli computer a farm medio/grandi. Calcolo HTC distribuito e griglie computazionali. Cloud. Calcolo vettoriale/parallelo, uso di GPGPU e in generale calcolo HPC (cenni). Concetti generali su: Big Data, tecniche di Analytics, Machine learning, Deep learning, Intelligenza artificiale, metodi di algebra simbolica ed applicazioni al deep learning.

MODULO 2: Espansione dei temi di cui al Modulo 1 (oltre i “cenni”), con focalizzazione sulle tematiche rilevanti per le esigenze di settore, in particolare Grid Computing, Cloud Computing. Modelli di calcolo scientifico: componenti e loro interazione. Data management. Soluzioni di storage in HEP. Workflow management. Problemi di job scheduling e di resource matching/execution in HEP. Networking ad alte prestazioni. Monitoring. Accounting. Security. Come disegnare un modello di calcolo per un esperimento HEP di nuova generazione partendo dai parametri dell’esperimento. Come operare con successo un modello di calcolo, e come evolverlo nel tempo. Trattamento di ingenti moli di dati con approcci Big Data in HEP. Paradigmi data-driven. Espansione dei temi di cui al Modulo 1 (oltre i "concetti generali") su applicazioni di Machine Learning, Deep Learning e Intelligenza Artificiale in HEP.

Testi/Bibliografia

Dispense, fornite come repository pubblico, e risorse online gratuite per l'approfondimento dei temi proposti in classe.

Metodi didattici

Il corso verrà svolto tramite lezioni frontali, con partecipazione attiva da parte degli studenti. Durante le lezioni gli studenti saranno guidati nell'implementazione e la pratica degli argomenti discussi. Saranno organizzati seminari opzionali per l'approfondimento di temi di interesse specifico.

Modalità di verifica e valutazione dell'apprendimento

Gli studenti verranno valutati sulla base di un progetto di programmazione. Questo progetto andrà inserito in un repository di controllo di versione pubblico. È lasciata libertà allo studente sul linguaggio utilizzato. I metodi di controllo di versione accettabili sono git e fossil. Il progetto sarà valutato sulla base di: chiarezza della struttura del repository (6 punti) chiarezza e completezza della documentazione ed organizzazione del codice sorgente (12 punti) presenza ed eseguibilità di una routine di test (12 punti) Lla valutazione sarà poi potenzialmente migliorata dai seguenti punti (opzionali): Utilizzo di tecnologie innovative e librerie avanzate (fino a 3 punti) contributo a progetti open source (fino a 6 punti)

Strumenti a supporto della didattica

Dispense, fornite come repository pubblico, e repository pubblici usati come casi di studio

Orario di ricevimento

Consulta il sito web di Daniele Bonacorsi

Consulta il sito web di Lorenzo Rinaldi