Roof model e intensità aritmetica Clicca QUI per vedere il messaggio nel forum |
Vagabond |
Come si fanno gli esercizi sull'intensità aritmetica che Borghese mette nei temi d'esame? Questo ad'esempio:
Data una CPU quad-core, a 64 bit (dati float su 64 bit) con 8 cammini di calcolo per ciascun core, in ciascuno dei quali vengono elaborati dati a 256 bit. Detta CPU ha un clock di 4GHz. A questa CPU è associato un sistema di memoria che è in grado di sostenere l’elaborazione con un flusso dati dalla memoria alla CPU pari a 2Gbyte /s. Determinare la massima velocità di elaborazione della CPU per 6 diversi programmi benchmark che hanno intensità aritmetica rispettivamente di: ¼, ½, 1, 4, 8, 32 e determinare se le prestazioni sono limitate dalla memoria o dal calcolo.
Vorrei capire quali sono i passaggi da fare per risolverlo. |
Seoman |
Quoto Vagabond. Ho l'esame giovedì, ho preparato tutti gli argomenti molto bene, compreso l'esercizio sulla pipe line, ma non trovo da nessuna parte una corretta spiegazione di questo esercizio, nemmeno sul libro ... |
panzone |
Non è particolarmente complicata. La prima cosa è ricavare la ( teorica ) potenza di calcolo. Questo è facile poichè:
4 ( numero core ) * 8 ( numero unità di calcolo per core ) * 4 ( numero di float nel bus ) * 4 ( frequenza CPU ) = 128 GFLOPS.
Ora, sapendo che il bus dati fornisce 2 Gb al secondo, si determina che il punto di "rottura" delle prestazioni si ha a 128 / 2 = 64.
Questo significa che tutti e 6 i programmi di benchmark son limitati dalla memoria.
Ora, l' intensità aritmetica è un indice della quantità di "richieste" che una CPU necessita di fare alla memoria durante l' esecuzione di quel programma. Questo significa che, essendo limitati dalla memoria:
Tempo di calcolo = Flops / Banda * Intensità
( N.B. Io posso permettermi di ignorare le varie potenze di 10 perchè sia banda che Flops son 10^9, ma solo nel mio caso )
(N.B.2 Teoricamente il Flops nella formula non è quello della CPU ma quello del programma ( ovvero una stima del numero di operazioni che il programma eseguirà ). Visto che però son benchmark, possiamo assumere che cerchino di spremere il massimo della CPU ).
Ergo, il primo programma ha una velocità di esecuzione teorica di:
128 / (1/4) * 2 = 256 ( P.S. Sembra un numero immenso, ed effettivamente lo è, tuttavia 1/4 signfica che il programma esegue 4 accessi alla memoria per ogni operazione aritmetica in media. E abbiamo visto prima che il problema della nostra CPU è la banda molto limitante ).
Notiamo che più saliamo, più il valore di tempo si riduce perchè si riduce il bottleneck dato dalla memoria lenta. Difatti, ad esempio
128 / 32 * 2 = 2 secondi. Questo perchè il programma esegue una media di 32 operazioni per ogni accesso alla memoria, e nel nostro caso è una manna che ci avvicina al caso "ideale".
Il consiglio maggiore che posso darvi è semplicemente ricordarvi com' è strutturato il grafico del rooftline. Una volta che si ha in testa quello è facile far tornare tutto. |
Seoman |
GRazie Mille ! Ora che l'hai spiegato capisco anche meglio il senso della teoria ... |
Seoman |
4*4*4*8*10^9=128 GFlops ?????
Non dovrebbero essere 512 GFlops ? |
|
|
|