Wat is Wet van Amdahl?
Wet die zegt dat, als slechts een deel van een programma wordt geparalleliseerd, de totale versnelling wordt begrensd door het deel dat niet kan worden geparalleliseerd. Bij bijvoorbeeld 90% parallellisatie is het programma maximaal 10 keer sneller.
Japanse benaming: アムダールの法則
“Wet van Amdahl” komt voor in 6 oefenvragen uit 3 onderwerpen, bijv. Prestatiemeting en profiling, CPU en architectuur, Multicore en synchronisatie.
Vakgebied: CPU en architectuur
De formule en het plafond
De wet van Amdahl geeft de versnelling van een programma waarvan een fractie p over N processors kan worden geparalleliseerd als S = 1 / ((1 − p) + p/N). Als N onbeperkt groeit, verdwijnt de term p/N en nadert de versnelling 1 / (1 − p). Bij p = 0,9 ligt dat plafond op 10×, en met tien processors is het resultaat slechts ongeveer 5,3×, zodat de helft van de hardware feitelijk wordt verspild. Het seriële deel, hoe klein het ook lijkt, gaat uiteindelijk de looptijd domineren zodra het parallelle deel fijn genoeg is opgedeeld.
Dezelfde wet voor elke versnelling
De wet geldt voor elke gedeeltelijke verbetering, niet alleen voor het toevoegen van cores. Als een sectie die 50% van de looptijd kost 4× sneller wordt gemaakt, wordt de nieuwe tijd 0,5 + 0,5/4 = 0,625 van de oorspronkelijke, een totale versnelling van 1,6×, en geen enkele verdere optimalisatie van die sectie kan boven 2× uitkomen. Een deel dat 1% van de tijd kost oneindig snel maken, levert maar ongeveer 1% op. Dit is de kwantitatieve basis van het principe make the common case fast en de reden om een programma te profileren voordat je het optimaliseert.
Waarom echte programma's slechter presteren dan de formule
De wet van Amdahl veronderstelt al dat het parallelle deel perfect schaalt, dus gemeten versnellingen liggen meestal nog lager. Threads wachten bij locks en barriers, gedeelde data en false sharing laten cachelines tussen cores heen en weer kaatsen, ongelijk verdeeld werk laat sommige cores stilstaan, en veel threads kunnen de geheugenbandbreedte verzadigen. De overhead van communicatie en synchronisatie kan zelfs met N groeien, zodat extra cores een programma uiteindelijk kunnen vertragen. De schoonste schaling ontstaat als elke thread vooral met eigen data werkt, met weinig communicatie of wachten.
Veelgestelde vragen
Hoe bereken je de versnelling met de wet van Amdahl?
Deel 1 door de nieuwe relatieve looptijd: S = 1 / ((1 − p) + p/s), waarbij p de fractie van de tijd is die wordt beïnvloed en s hoeveel sneller dat deel wordt (s = N voor N processors). Voor p = 0,5 en s = 4 geeft dit 1 / 0,625 = 1,6×.
Wat is de maximale versnelling als 95% van een programma parallel is?
De grens is 1 / (1 − 0,95) = 20×, ongeacht hoeveel processors worden gebruikt. Zelfs in de buurt van die grens komen vereist zeer grote aantallen processors en een vrijwel perfecte parallelle efficiëntie.
Wat is het verschil tussen de wet van Amdahl en de wet van Gustafson?
De wet van Amdahl houdt de probleemgrootte vast en laat zien dat het seriële deel de versnelling begrenst. De wet van Gustafson laat het probleem meegroeien met het aantal processors, zodat de seriële fractie krimpt en een vrijwel lineaire geschaalde versnelling mogelijk wordt.