1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-28 04:44:19 +00:00
appunti-steffo/7 - High performance computing/glossario.md

306 lines
No EOL
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Il glossario contiene voci fino allo slideshow 07.
### High performance (HP)
Sistemi con hardware specializzato per effettuare calcoli più velocemente, ad esempio tramite esecuzione in parallelo.
### Architectural heterogeneity
Sistemi le cui risorse di calcolo non sono tutte dello stesso tipo, e invece sono specializzate allo svolgimento di diversi compiti.
### Massive parallelism
### Locally homogeneous
Quando una parte di un sistema ha tante risorse di calcolo uguali che condividono risorse.
### Globally heterogeneous
Quando un sistema ha diverse parti *locally homogeneous* che interagiscono fra loro.
### Legge di Moore
Il numero di transsitor in un circuito integrato raddoppia ogni due anni.
Ha cessato di essere valida intorno al 2000.
### Legge di Dennard
I transistor possono essere scalati $\times 0.7$ ad ogni generazione di processori.
Riducendo le dimensioni dei transistor si può scalare la loro frequenza di $\times 1.4$.
Per impedire al campo elettrico di aumentare e di causare interferenze, anche la potenza fornita ai transistor è scalata di $\times 0.7$.
Ha cessato di essere valida nel 2005.
### Power wall
^2241b2
Soglia oltre la quale non è possibile diminuire la potenza fornita ai transistor.
### Instruction-level parallelism (ILP)
Parallelismo implicito nei processori per aumentare le prestazioni single-core, realizzato tramite pipelining.
Efficacia limitata.
### Dark silicon
Limitazione nei sistemi multicore che impedisce a tutti i core di essere attivati contemporaneamente per limiti di potenza.
Vedi [[#^2241b2|Power wall]].
### Soluzione #1: Rimpicciolimento
Realizzare chip più piccoli ed economici.
### Soluzione #2: Dimming
Realizzare più core paralleli, ma più lenti.
### Soluzione #3: Specializzazione
Realizzare più core con funzionalità diverse e selezionare sul momento quali usare.
### Soluzione #4: Cambio di approccio
Iniziare ad usare tecnologie diverse per la realizzazione di microprocessori.
### Tassonomia di Flynn (SISD, SIMD, MISD, MIMD)
Classificazione di processori in base a come operano in parallelo.
### Single instruction, single datastream
Esecuzione sequenziale. CPU single-core.
### Single instruction, multiple datastreams
Vengono effettuate le stesse operazioni su dati diversi. GPU.
### Multiple instruction, single datastreams
Vengono effettuate operazioni diverse sugli stessi dati. Array processors.
### Multiple instruction, multiple datastreams
Vengono effettuate a matrice istruzioni diverse su dati diversi. CPU multi-core.
### Loop unrolling
Trasformazione di un loop in modo che riesca ad effettuare più operazioni con una singola istruzione.
```c
for(int i = 0; i < SIZE; i++) {
array[i] += 1;
}
```
```c
for(int i = 0; i < SIZE / 4; i++) {
array[i+0] += 1;
array[i+1] += 1;
array[i+2] += 1;
array[i+3] += 1;
}
```
```c
for(int i = 0; i < SIZE / 4; i++) {
addToAddresses(array, i, n, 1) // Singola istruzione assembly!
}
```
### Istruzione di *fork*
Divisione dellexecution path in due path separati con istruzioni diverse
### Istruzione di *join*
Riunione di execution path *fork*ati, richiede che entrambi abbiano terminato lesecuzione.
### Symmetric multi-processors (SMP, UMA)
Processori shared memory la cui memoria è fisicamente condivisa.
Sono uniform memory access time (UMA).
### Distributed shared memory (DSM, NUMA)
Processori shared memory la cui memoria è fisicamente distribuita tra i core.
Sono non-uniform memory access time (NUMA).
### Coherence
Principio di caching secondo il quale il contenuto delle cache deve essere sempre valido, anche quando un altro processore ha modificato il dato in questione nella memoria principale.
### Snoopy cache
Cache che interagisce direttamente con le altre cache attraverso un singolo bus condiviso, invalidando e scrivendo i dati quando necessario.
### Directory cache
Cache distribuita in modo simile a una memoria di un sistema NUMA, richiede a ciascun core di mantenere una directory di quali core hanno in cache un certo dato.
### Full bit vector
Ogni blocco di cache ha nella directory un bit per ciascun core che potrebbe avere o no il blocco cacheato.
### Limited pointer scheme (LPS)
Invece che usare una matrice di flag, vengono salvati gli indici dei core, come in un array sparso.
### Broadcast
Quando gli indici dei core utilizzano più spazio di quello disponibile, si ritorna a un sistema di broadcast.
### No broadcast
Quando gli indici dei core utilizzano più spazio di quello disponibile, il più nuovo sostituisce quello vecchio.
### Vettore grossolano
Vettore che fa in modo che ciascun indice corrisponda a più core, ad esempio tramite modulo `%`
### Puntatori dinamici
### Sparse directory
Viene usata una linked list distribuita per rappresentare quali core hanno in cache quale blocco.
### Protocollo Modified-Shared-Invalid (MSI)
Protocollo per invalidazione di blocchi di cache che prevede tre stati:
- modified
- shared
- invalid
### Protocollo Modified-Exclusive-Shared-Invalid (MESI)
Protocollo per invalidazione di blocchi di cache che prevede quattro stati:
- exclusive modified
- exclusive
- shared
- invalid
### Coherence miss / Communication miss / Sharing miss
Miss di cache dovuto alle azioni di un altro core.
### True
Quando il dato ad essere modificato da un altro core è specificamente quello salvato in cache.
### False
Quando il dato ad essere modificato è solamente contenuto allinterno dello stesso blocco.
### Operazioni atomiche / operazioni indivisibili
Operazioni che vengono effettuate da un thread in una transazione unica, che non possono essere interrotte a metà.
A livello hardware, sono comunemente implementate le seguenti.
### Test & Set (Lock acquire)
```cpp
atomic bool acquire(bool* lock) {
bool result = *lock;
*lock = true;
return result;
}
```
### Swap
```cpp
atomic void swap<T>(T* a, T* b) {
T tmp = *a;
*a = *b;
*b = tmp;
}
```
### Compare & Swap
### Test & Test & Set
### Test | Backoff & Test & Set (Lock acquire)
### Esclusione mutua (Mutex, Lock)
Meccanismo per impedire che un altro core operi durante unoperazione atomica.
### Lock
Meccanismo di sincronizzazione che permette a un solo thread alla volta di utilizzare una risorsa.
### Sezione critica
Parte di codice che può eseguire solo un thread alla volta.
### Sequential consistency
Caratteristica di unarchitettura che non effettua reordering di alcun tipo.
### Write buffering (W→R)
Caratteristica di unarchitettura che permette ai read successivi ai writes di essere effettuati in anticipo.
### Total store ordering
I read di altri processori sono bloccati finchè tutti gli altri processori non hanno ricevuto il nuovo valore.
### Processor consistency
I read di altri processori sono bloccati finchè il processore singolo non ha ricevuto il nuovo valore.
### Partial store ordering (W→R + W→W)
Caratteristica di unarchitettura che permette a qualsiasi operazione di essere effettuata prima che un write abbia effettivamente scritto il valore in memoria.
### Weak ordering / release consistency (fence)
Caratteristica di unarchitettura che permette a qualsiasi operazione di essere effettuata prima di altre.
Richiede lutilizzo di particolari istruzioni *fence* che impediscono il reordering.
### Legge di Amdahl
$$
Speedup = \frac{Old\ Run\ Time}{New\ Run\ Time}
$$
$$
Speedup = \frac{1}{\left( 1 - Parallel\ Time \right) + \left(\frac{Parallel\ Time}{n}\right)}
$$
### Shared memory
Implementazione del parallelismo a livello di codice che prevede memoria condivisa tra più core, richiede meccanismi di atomicità e locking.
Tipo `threading` in Python.
### Distributed memory / Message passing
Implementazione del parallelismo a livello di codice che prevede memoria individuale per ciascun core, richiede scambio di dati esplicito.
Tipo `multiprocessing` in Python.
Il costo per il message passing è:
$$
Message\ Cost = Frequency \times \left( Overhead + Network\ Delay + \frac{Data\ Size}{Messages \times Bandwidth} + Network\ Contention - Overlap \right)
$$
### Static load balancing
I task vengono assegnati ai core a compile-time.
### Dynamic load balancing
I task vengono assegnati ai core a run-time.