({{Číslo projektu, CZ.1.07/1.1.36/02.0066}, {Autor, Ladislav Kašpárek}, {Předmět, Programovací metody}, {Téma, Amdahlův zákon}, {Metodický pokyn, výkladový text s ukázkami}})

Amdahlův zákon

Amdahlův zákon se zabývý výpočtem výkonového zisku, čili zrychlení S, dosaženého vylepšením nějaké části počítače.

Definujeme:

S=((výkonnost při využití vylepšení)/(výkonnost bez využití vylepšení))=((Subscript[P, NEW])/(Subscript[P, OLD]))
nebo také:

S=((doba výpočtu bez využití vylepšení)/(doba výpočtu při využití vylepšení))=((Subscript[T, OLD])/(Subscript[T, NEW]))


Zrychlení S = číslo, kolikrát je rychlejší běh úlohy na počítači s vylepšením oproti běhu stejné úlohy na původním počítači.

Dále je nutné definovat:
část výpočtu, která se bude zrychlovat:

(Subscript[F, E])=((původní doba výpočtu zlepšené části úlohy)/(půuvodní celková doba výpočtu))≤1
a kolikrát se tato část bude zrychlovat:

(Subscript[S, E])((původní doba výpočtu zlepšené části úlohy)/(doba výpočtu zlepšené části úlohy))>1

Doba výpočtu (Subscript[T, NEW]) na vylepšeném počítači se bude skládat z:

(1 - (Subscript[F, E]))(Subscript[T, OLD]) - Doba výpočtu té části úlohy, kterou nelze vylepšit

((Subscript[F, E])/(Subscript[S, E]))(Subscript[T, OLD]) - doba výpočtu vylepšené části úlohy

Takže celkové zrychlení, tedy Amdahlův zákon zní :

S=((Subscript[T, OLD])/(Subscript[T, NEW]))=(1/((1-(Subscript[F, E]))+((Subscript[F, E])/(Subscript[S, E]))))

Příklad 1

Předpokládejme, že chceme vylepšit procesor serveru pro Web. Nový CPU je desetkrát rychlejší pro Webové aplikace než nynější. Dále víme, že nyní je CPU zaměstnáno ze 40 % výpočty a 60 % času je čekání na I/O.

Řešení

(Subscript[F, E])=0.4;

(Subscript[S, E])=10;

Solve[S==(1/((1-(Subscript[F, E]))+((Subscript[F, E])/(Subscript[S, E])))),S]

Výsledek je poněkud pesimistický, že? Desetkrát jsme vylepšili výkon procesoru a přitom celkové zrychlení je pouze 1.5.

Příklad 2

Pro FP výpočty v počítačové grafice je hodně používaná operace odmocniny FPSQRT a výkonnost procesorů pro grafiku je na jejím efektivním provádění silně závislá. Předpokládejme, že FPSQRT odpovídá 20 % a všechny FP instrukce odpovídají 50 % doby výpočtu kritické zkušební úlohy pro grafiku.
Úkolem je rozhodnout, zda je výhodnější:
	10 x zrychlit provádění instrukce FPSQRT
	1.6 x zrychlit provádění všech FP instrukcí

Řešení 2

(Subscript[F, E1])=0.2;

(Subscript[S, E1])=10;

Solve[(Subscript[S, 1])==(1/((1-(Subscript[F, E1]))+((Subscript[F, E1])/(Subscript[S, E1])))),(Subscript[S, 1])]

(Subscript[F, E2])=0.5;

(Subscript[S, E2])=1.6;

Solve[(Subscript[S, 2])==(1/((1-(Subscript[F, E2]))+((Subscript[F, E2])/(Subscript[S, E2])))),(Subscript[S, 2])]

Jak vidíte, byť nepatrně, ale spíše se vyplatí možnost B, tedy zrychlit 1.6 x všechny FP instrukce.

Zdroje

http://reference.wolfram.com/mathematica/ref/Solve.html