Il calcolo ad alte prestazioni: definizione e motivazioni (2ore). Misura delle prestazioni di un calcolatore e del tempo di esecuzione di un software (2ore). Evoluzione dei supercalcolatori (3ora). Legge di Moore e successive rimodulazioni (1ora). Processori grafici (GPU) e ambiente CUDA: il parallelismo delle GPU. Il General Purpose GPU. Array di multiprocessori (2ore). Unità elaborative delle GPU: host e device, il concetto di kernel, Grid e Blocchi, il pitch ed il concetto di coalescenza (6ore). L’architettura CUDA, organizzazione della memoria (4ore). Programmare in parallelo con CUDA e il linguaggio C (2ore). Le principali routine CUDA: allocazione, de-allocazione e scambio dati (2ore). Invocazione e dichiarazione di un kernel, API per la gestione della memoria, il processo di mapping (4ore). Gestione dei dati 2D: routine per il picth, gestione degli errori e timing (4ore). Allocazione e gestione di strutture dati nella shared memory (3ore). Routine per la sincronizzazione dei thread, il device menagement (3ore). Il toolkit CUDAprof e la sua versione grafica CUDAprofiler (2ore). La libreria CUBLAS di CUDA per le operazioni di base tra matrici e vettori (3ore). Routine predefinite per il passaggio dei dati tra host e device, creazione dell’ambiente CUBLAS, gestione degli errori e routine per le operazioni di base (3ore).