Qu'est-ce que Loi d'Amdahl ?
Loi selon laquelle, lorsqu'on ne parallélise qu'une partie d'un programme, l'accélération globale est limitée par la partie non parallélisable. Par exemple, même en parallélisant 90 %, le gain ne dépasse pas 10 fois.
Nom japonais: アムダールの法則
« Loi d'Amdahl » apparaît dans 5 questions d'entraînement réparties sur 2 thèmes, dont Analyse des performances, CPU et architecture.
Domaine: CPU et architecture
La formule et son plafond
La loi d'Amdahl donne l'accélération d'un programme dont une fraction p peut être parallélisée sur N processeurs : S = 1 / ((1 − p) + p/N). Lorsque N croît sans limite, le terme p/N s'annule et l'accélération tend vers 1 / (1 − p). Avec p = 0,9, ce plafond vaut 10×, et avec dix processeurs le résultat n'est que d'environ 5,3× : la moitié du matériel est en pratique gaspillée. La fraction séquentielle, aussi petite qu'elle paraisse, finit par dominer le temps d'exécution dès que la partie parallèle a été suffisamment découpée.
La même loi pour tout type d'accélération
La loi s'applique à toute amélioration partielle, pas seulement à l'ajout de cœurs. Si une section occupant 50 % du temps d'exécution devient 4× plus rapide, le nouveau temps vaut 0,5 + 0,5/4 = 0,625 du temps initial, soit une accélération globale de 1,6×, et aucune optimisation supplémentaire de cette section ne peut dépasser 2×. Rendre infiniment rapide une partie qui occupe 1 % du temps ne fait gagner qu'environ 1 %. C'est le fondement quantitatif du principe « accélérer le cas courant » (make the common case fast) et la raison pour laquelle il faut profiler un programme avant de l'optimiser.
Questions fréquentes
Comment calculer l'accélération avec la loi d'Amdahl ?
On divise 1 par le nouveau temps d'exécution relatif : S = 1 / ((1 − p) + p/s), où p est la fraction du temps concernée et s le facteur d'accélération de cette partie (s = N pour N processeurs). Pour p = 0,5 et s = 4, on obtient 1 / 0,625 = 1,6×.
Quelle est l'accélération maximale si 95 % d'un programme est parallèle ?
La limite est 1 / (1 − 0,95) = 20×, quel que soit le nombre de processeurs utilisés. Même s'approcher de cette limite exige un très grand nombre de processeurs et une efficacité parallèle quasi parfaite.
Quelle est la différence entre la loi d'Amdahl et la loi de Gustafson ?
La loi d'Amdahl fixe la taille du problème et montre que la partie séquentielle plafonne l'accélération. La loi de Gustafson laisse le problème grandir avec le nombre de processeurs : la fraction séquentielle diminue et une accélération à l'échelle quasi linéaire devient possible.