Legge di Amdahl

Da Wikipedia, l'enciclopedia libera.
L'aumento di velocità di un programma che usa più processori nell'informatica parallela è limitato dalla frazione sequenziale del programma. Per esempio, se metà del programma è sequenziale, l'aumento massimo teorico di velocità che si ottiene usando un sistema distribuito sarebbe 2 (1/(0.5+(1-0.5)/N)) quando N è grandissimo

La legge di Amdahl, che ha preso il nome del progettista di computer Gene Amdahl, viene usata per trovare il miglioramento atteso massimo in una architettura di calcolatori o in un sistema informatico quando vengono migliorate solo alcune parti del sistema. Nella sua forma più generale può essere espressa come:

"Il miglioramento che si può ottenere su una certa parte del sistema è limitato dalla frazione di tempo in cui tale attività ha luogo"

che può essere ulteriormente semplificata nella pratica regola:

"Make the common case fast" (Rendi veloce il caso più frequente)

La legge di Amdahl viene usata spesso nell'informatica parallela per predire l'aumento massimo teorico di velocità che si ottiene usando più processori.

Nell'ambito dei sistemi software la legge di Amdahl può essere interpretata in modo più tecnico, ma in parole povere significa che è l'algoritmo a decidere l'aumento di velocità, non il numero di processori. Prima o poi si raggiunge un punto in cui non si può parallelizzare ulteriormente l'algoritmo.

La legge di Amdahl è una dimostrazione della legge dei rendimenti calanti: anche se si potesse aumentare la velocità di una parte di un computer di cento o più volte, se tale parte influisce solamente sul 12% dell'elaborazione complessiva, al massimo l'accelerazione può essere di un fattore \frac{1}{1 - 0.12} = 1.136.

Supponiamo che un'elaborazione abbia due parti indipendenti, A e B. B impiega circa il 25% del tempo dell'intero calcolo. Lavorando molto intensamente, si riesce a rendere questa parte 5 volte più veloce, ma ciò riduce di poco il tempo dell'intero calcolo. D'altra parte, può bastare meno lavoro per rendere la parte A veloce il doppio. Ciò renderà il calcolo molto più veloce che ottimizzando la parte B, anche se B è stato accelerato di più (5x contro 2x).

Più tecnicamente, la legge riguarda l'aumento di velocità ottenibile da un miglioramento a un calcolo che influisce per una proporzione P di quel calcolo, dove il miglioramento riduce il tempo di calcolo di un fattore S. (Per esempio, se un miglioramento può velocizzare il 30% del calcolo, P sarà 0.3; se il miglioramento raddoppia la velocità della porzione modificata, S sarà 2.) La legge di Amdahl afferma che l'aumento di velocità complessivo prodotto dal miglioramento sarà

\frac{1}{(1 - P) + \frac{P}{S}}.

Per vedere come si arriva a questa formula, supponiamo che il tempo di esecuzione del vecchio calcolo sia 1, in una data unità di tempo. Il tempo di esecuzione del nuovo calcolo sarà il tempo impiegato per la frazione non migliorata (che è 1 − P) più il tempo impiegato dalla frazione migliorata. Il tempo impiegato dalla parte del calcolo migliorata è il tempo di esecuzione della parte non ancora migliorata diviso per il fattore di accelerazione, ossia P/S. L'aumento finale di velocità è calcolato dividendo il vecchio tempo di esecuzione per il nuovo tempo di esecuzione, ottenendo così la formula sopra.

Ecco un altro esempio. Abbiamo un compito scomponibile nelle seguenti quattro parti: P1 = 0,11 ossia 11%, P2 = 0,18 ossia 18%, P3 = 0,23 ossia 23%, P4 = 0,48 ossia 48%, aventi come somma 100%. Poi, non miglioriamo P1, perciò S1 = 1 ossia 100%, acceleriamo P2 di un fattore 5, perciò S2 = 5 ossia 500%, acceleriamo P3 di un fattore 20, perciò S3 = 20 ossia 2000%, e acceleriamo P4 di un fattore 1,6, perciò S4 = 1,6 ossia 160%. Usando la formula \frac{P1}{S1} + \frac{P2}{S2} + \frac{P3}{S3} + \frac{P4}{S4}, troviamo che il tempo di esecuzione è {\frac{0,11}{1} + \frac{0,18}{5} + \frac{0,23}{20} + \frac{0,48}{1,6}} = 0,4575 ossia un po' meno della metà del tempo di esecuzione originale che sappiamo essere 1. Perciò l'accelerazione complessiva è \frac{1}{0,4575} = 2,186, ossia, usando la formula \frac{1}{\frac{P1}{S1} + \frac{P2}{S2} + \frac{P3}{S3} + \frac{P4}{S4}}, poco più del doppio della velocità originale. Si noti come le accelerazioni 20x e 5x non hanno un grande effetto sull'accelerazione e sul tempo di esecuzione complessivi, dato che oltre la metà del compito viene accelerato solo di un fattore 1,6 o non viene accelerato affatto.

Parallelismo[modifica | modifica sorgente]

Nel caso speciale del parallelismo, la legge di Amdahl afferma che se F è la frazione di un calcolo che è sequenziale (cioè che non può beneficiare dal parallelismo), e (1 − F) è la frazione che può essere parallelizzata, allora l'aumento massimo di velocità che si può ottenere usando N processori è

\frac{1}{(1-F)+ \frac{F}{N}}.

Al limite, al tendere di N all'infinito, l'accelerazione tende a 1/F. In pratica, il rapporto prestazioni/prezzo scende rapidamente al crescere di N, dato che (1 − F)/N diventa piccolo rispetto a F.

Per fare un esempio, se F è solamente il 10%, la velocità del calcolo può essere al massimo decuplicata, indipendentemente dal valore di N. Per questa ragione, il calcolo parallelo è utile solamente o per piccoli numeri di processori o per problemi con valori molto bassi di F. Gran parte della ricerca sul calcolo parallelo consiste nel tentativo di ridurre F al valore più piccolo possibile.

Altri progetti[modifica | modifica sorgente]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica