87948 - SOFTWARE AND COMPUTING FOR APPLIED PHYSICS

Anno Accademico 2024/2025

  • Docente: Enrico Giampieri
  • Crediti formativi: 6
  • SSD: FIS/07
  • Lingua di insegnamento: Inglese
  • Moduli: Enrico Giampieri (Modulo 1) Nico Curti (Modulo 2) Alessandra Merlotti (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 the Applied Physics field. 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. The student will be able to solve advanced problems in scientific software design that will be developed as small group projects addressing real word problems in the Applied Physics field.

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. 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:
Formazione avanzata sulle tecniche di ottimizzazione del codice, focalizzandosi su tre aree chiave: vettorizzazione del codice, calcolo parallelo e integrazione di più linguaggi di programmazione. Gli studenti impareranno come migliorare le prestazioni dei loro programmi attraverso la vettorizzazione, massimizzando l'efficienza della CPU per eseguire operazioni su più dati simultaneamente. Il modulo esplorerà anche le tecniche di calcolo parallelo, introducendo concetti e strumenti per distribuire il carico di lavoro su più core o macchine, aumentando l'efficienza e riducendo i tempi di esecuzione. Infine, verrà trattata l'integrazione di diversi linguaggi di programmazione, mostrando come combinare le caratteristiche di diversi linguaggi per ottimizzare specifiche parti del codice. Al termine del modulo, gli studenti saranno in grado di applicare queste tecniche per creare software ad alte prestazioni, adatti a contesti di calcolo intensivo.

 

MODULO 3

Pipeline di dati e snakemake, generatori di numeri casuali, integrazione di equazioni differenziali ordinarie e analisi di sensibilità, simulazione di processi stocastici, catene di Markov per la generazione di testi, assemblaggio del DNA attraverso i grafi di De Bruijn.

Alla fine del modulo lo studente imparerà ad utilizzare algoritmi basati su processi casuali e su grafi per simulare sistemi fisici e studiare problemi reali nel campo della fisica applicata. Inoltre, lo studente imparerà a gestire diversi tipi di dati e ad automatizzarne l'analisi attraverso workflow management tools come snakemake.

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):
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

Link ad altre eventuali informazioni

https://unibodifabiophysics.github.io/programmingCourseDIFA/

Orario di ricevimento

Consulta il sito web di Enrico Giampieri

Consulta il sito web di Nico Curti

Consulta il sito web di Alessandra Merlotti