Materie di Ingegneria Elettronica




Architetture Parallele

Le architetture parallele sono, in informatica, dei supporti hardware (in generale computer multiprocessore o più semplicemente multi-core) che elaborano algoritmi sfruttando il parallelismo e la vettorialità delle operazioni da svolgere per aumentare la velocità di esecuzione dell'algoritmo su una macchina avente maggiori core di elaborazione. Tale velocità, rispetto allo stesso calcolo svolto da un unico core di elaborazione, può risultare ordini di grandezza maggiore in base alle architetture utilizzate.
Il concetto di architetture parallele si estende non solo a multiprocessore e multicore, ma anche all'utilizzo del calcolo mediante GPGPU delle architetture delle schede video ATI e nVidia (le maggiori produttrici di schede grafiche).

Il corso si incentra principalmente sul calcolo vettoriale delle GPU (quindi architetture fortemente parallele) e in particolar modo sulla programmazione e l'esecuzione di codice C/C++ in ambiente CUDA (programmazione C like per le schede video nVidia).

Conoscenze pregresse:
-Fondamenti di programmazione e architettura dei calcolatori (programmazione C);
-Algebra lineare (matrici, vettori e operazioni su di essi);

Indice argomenti:
-Il concetto di parallelismo
-Tassonomia di Flynn
-Topologia di memoria
-I modelli Message Passing e Shared Memory
-Architetture MIMD e SIMD
-Architetture sistoliche e dataflow
-Automi cellulari
-Reti neurali
-La quantum computation
-Il software parallelo: naming, ordering, decomposition, orchestration, mapping
-Sincronizzazione
-GPU: architettura
-GPU: tipi e gestione della memoria
-GPU: thread e kernel, gestione host e GPU
-GPU: sincronizzazione, gestione multi-GPU
-CUDA: architettura
-CUDA: elementi del linguaggio

Materiale per lo studio della materia

Il professor Abramo Antonio mette a disposizione delle slide sul suo sito che riporto qui sotto in un unico file .rar (gli argomenti del corso e quelli trattati sono quelli nell'indice della scheda precedente)

archpar.rar [23.2 MB]

Inoltre, cercando per la rete ho recuperato altre slide molto simili da cui il professore può aver preso spunto:

archpar_extra.rar [10.3 MB]

Consiglio, poi, caldamente l'approfondimento degli argomenti con l'ausilio di wikipedia e google per integrare le slide (dopotutto non sono appunti completi)

Per quanto riguarda l'utilizzo delle funzioni e librerie CUDA, rimando ad un sito con la documentazione necessaria (organizzata meglio del sito ufficiale)
[ENG] http://www.clear.rice.edu/comp422/resources/cuda/html/index.html

Esercizi di programmazione CUDA

-Si scriva un programma in C/C++ che calcoli il risultato di una moltiplicazione tra matrici di dimensioni variabili, sia mediante l'utilizzo della CPU, sia mediante la chiamata di funzioni CUDA per la GPU.
Infine, come verifica, effettuare un controllo, elemento per elemento, che le matrici risultanti siano identiche.