Questo sito contribuisce alla audience di

Tecniche e strumenti per la programmazione scientifica

Un coros a cura del cineca destinato a Ricercatori e programmatori interessati a un debug veloce ed efficiente e a conoscere tecniche generali di ottimizzazione. Il corso e' particolarmente indicato per chi si avvicina la prima volta a tematiche di programmazione nell'ambito del calcolo scientifico

Descrizione: I moderni calcolatori utilizzati per il calcolo scientifico,
dalle semplici workstation ai più potenti cluster e supercomputer paralleli,
hanno ormai raggiunto elevate potenze di calcolo. Per poter sfruttare al massimo
le potenzialità di queste macchine è però importante conoscere alcune
caratteristiche architetturali, i bottleneck dei codici, cosa il compilatore sia
capace di fare per ottimizzare questi punti e come sia possibile riscrivere
sezioni del proprio codice per sfruttare al meglio l’hardware sottostante.
Il
corso, di base, è rivolto a programmatori Fortran e C che, pur non avendo
conoscenze particolari di informatica, hanno la necessità e l’interesse ad
imparare tecniche e semplici trick per debuggare velocemente codici scalari e
paralleli e per aumentare la velocità di esecuzione delle proprie simulazioni
scientifiche senza dover completamente stravolgere i sorgenti.
Il corso si
prefigge l’obiettivo di guidare l’utente ad analizzare e migliorare le
performance del proprio codice. Utilizzando come architetture “sperimentali” il
cluster Linux ed il sistema SP Power 5 del CINECA (rimanendo comunque generali
per sistemi Linux/Unix) vengono introdotte le tecniche e gli strumenti (con
particolare attenzione al mondo OpenSource) tesi al miglioramento delle
prestazioni.
Dopo una breve introduzione agli aspetti hardware che possono
influire direttamente sulle performance, vengono presentati gli strumenti di
analisi dell’esecuzione del codice: profiler software di diverso utilizzo e
profiler hardware. Con l’utilizzo di questi strumenti è più agevole determinare
i bottleneck degli algoritmi implementati per poterli eliminare o per
ottimizzarli al meglio. Una seconda parte del corso illustra alcune tecniche fra
le più diffuse per l’ottimizzazione (concetti di cache reuse, unrolling,
inlining, vettorizzazione, etc), le librerie matematiche scalari e parallele più
comuni, e l’utilizzo efficace dei flag del compilatore per gestire
dell’ottimizzazione del codice. Tramite una presentazione di codici reali viene
poi presentata una casistica per ristrutturare a livello di sorgente il codice e
migliorarne le performance.
Una parte del corso verte su tecniche e strumenti
per il debugging efficiente ed una corretta esecuzione dei codici su sistemi
Linux/Unix. Su tutti i sistemi sono infatti disponibili strumenti, generalmente
poco conosciuti, che in maniera semiautomatica (a livello di sorgente, a
runtime, analisi di core file) permettono di individuare velocemente cause di
errore ed operazioni non corrette altrimenti non facilmente risolvibili.

Argomenti:
Introduzione all’architettura dei calcolatori moderni

Introduzione ai processori AMD Opteron, IBM Power 5, INTEL Pentium
Cause
di errore nell’esecuzione di un codice e loro risoluzione
Utilizzo di
debugger scalari e paralleli
Utilizzo dei profiler hardware e software,
scalari e paralleli
Utilizzo efficiente del compilatore
Librerie
matematiche scalari e parallele
Hand tuning: ristrutturazione di codice
esistente
Esempi di debug e ottimizzazione su cluster Linux e sul sistema
IBM SP5

href="http://www.cineca.it/corsi/item.php?ID=697&TBL=ELENCO&PHPSESSID=057b6c13467db9f1b4e57dfe4ecb5b7b" target=_blank>Tecniche
e strumenti per la programmazione scientifica