Abbiamo illustrato il programma generale del corso incentrato principalmente su:
Creazione di algoritmi paralleli,
Parallellizzazione in ambito multicore
Parallelizzazione in ambito cluster.
Si illustreranno prima di tutto gli ambiento standard OpenMP e MPI.
Primo esempio abbiamo parlato di un problema che incontriamo solo in ambito multicore noto come False Sharing ovvero il degradamento nelle prestazioni dovuto alla necessità di mantenere il contenuto delle cache coerente fra i diversi core quando questi modificano la stessa pagina di memoria senza per altro operare sulle stesse locazioni di memoria.
L'esempio illustrato a lezione usa la direttiva:
#pragma omp parallel shared( <var>, <var>,...) num_threads(<N>)
Per la creazione delle parti parallele e le funzioni:
omp_get_num_procs();
omp_get_thread_num();
omp_get_num_threads();
Per ottenere il numero di core disponibili, l'indice del thread e il numero totale di thread in esecuzione.
omp_get_wtime();
E' stata usata per misurare il tempo impiegato dal programma.
COMPITO:Costruite voi un esempio ove rendete evidente questo problema.
Un buon articolo introduttivo a OpenMP:
http://msdn.microsoft.com/en-us/magazine/cc163717.aspx
Creazione di algoritmi paralleli,
Parallellizzazione in ambito multicore
Parallelizzazione in ambito cluster.
Si illustreranno prima di tutto gli ambiento standard OpenMP e MPI.
Primo esempio abbiamo parlato di un problema che incontriamo solo in ambito multicore noto come False Sharing ovvero il degradamento nelle prestazioni dovuto alla necessità di mantenere il contenuto delle cache coerente fra i diversi core quando questi modificano la stessa pagina di memoria senza per altro operare sulle stesse locazioni di memoria.
L'esempio illustrato a lezione usa la direttiva:
#pragma omp parallel shared( <var>, <var>,...) num_threads(<N>)
Per la creazione delle parti parallele e le funzioni:
omp_get_num_procs();
omp_get_thread_num();
omp_get_num_threads();
Per ottenere il numero di core disponibili, l'indice del thread e il numero totale di thread in esecuzione.
omp_get_wtime();
E' stata usata per misurare il tempo impiegato dal programma.
COMPITO:Costruite voi un esempio ove rendete evidente questo problema.
Un buon articolo introduttivo a OpenMP:
http://msdn.microsoft.com/en-us/magazine/cc163717.aspx