Qu'est-ce que la loi d'Amdahl ?
Énoncée en 1967 par l'architecte informatique Gene Amdahl, la loi d'Amdahl prédit l'accélération théorique maximale d'une tâche lorsqu'une partie seulement de celle-ci peut être parallélisée. Pierre angulaire du calcul parallèle, elle aide les ingénieurs à fixer des attentes réalistes avant d'investir dans davantage de processeurs, de cœurs ou de threads.
Comment utiliser ce calculateur
Renseignez deux valeurs : la fraction parallèle (p) — la proportion du programme (comprise entre 0 et 1) qui peut s'exécuter en parallèle — et le facteur d'accélération (s), généralement le nombre de processeurs ou de cœurs appliqués à cette partie parallèle. Le calculateur affiche alors l'accélération globale, l'accélération théorique maximale et l'efficacité parallèle.
La formule expliquée
L'équation s'écrit $$\text{Accélération} = \frac{1}{(1 - p) + \dfrac{p}{s}}$$ Le terme \((1 - p)\) correspond à la fraction séquentielle, impossible à accélérer. À mesure que \(s\) devient très grand, \(p/s\) tend vers zéro : l'accélération plafonne donc à \(1/(1 - p)\). C'est pourquoi un programme parallèle à 90 % ne pourra jamais aller plus de 10× plus vite, quel que soit le nombre de processeurs ajoutés.
Exemple concret
Supposons que 90 % d'un programme soit parallélisable (\(p = 0{,}9\)) et que vous utilisiez 4 processeurs (\(s = 4\)). Le dénominateur vaut alors $$(1 - 0{,}9) + \frac{0{,}9}{4} = 0{,}1 + 0{,}225 = 0{,}325$$ L'accélération est de \(1 / 0{,}325 \approx 3{,}08\times\). L'accélération maximale possible atteint \(1 / 0{,}1 = 10\times\), et l'efficacité s'élève à \(3{,}08 / 4 \approx 76{,}9\,\%\).
Interprétation de votre résultat
L'accélération globale est ce que vous obtenez réellement avec le nombre de processeurs \(s\) que vous avez saisi — par exemple, un résultat de 4,71× signifie que le programme parallélisé s'exécute environ 4,71 fois plus rapidement que la version monoprocesseur. L'accélération maximale, \(1/(1-p)\), est le plafond absolu que vous approcheriez avec infiniment de processeurs. L'écart entre les deux vous indique combien d'espace vous reste : si votre accélération globale est déjà proche du maximum, l'ajout de matériel aidera à peine.
L'efficacité répond à la question « à quel point j'utilise bien les processeurs que je paye ? » Une efficacité proche de 100 % signifie que chaque processeur contribue pratiquement à une unité complète d'accélération — une excellente utilisation des ressources. Une faible efficacité (disons, moins de 30 %) signifie que la plupart des processeurs sont inactifs ou attendent la partie série, vous payez donc pour du matériel qui fait peu de travail utile.
La fraction série \(1-p\) est la limite décisive. Même une petite fraction série limite fortement les performances : à \(p=0,95\) le plafond n'est que de 20×, donc au-delà d'environ 16–32 processeurs, chaque nouveau processeur ajoute presque rien. Une règle pratique est d'arrêter d'ajouter des processeurs une fois que l'efficacité baisse en dessous de votre seuil acceptable (souvent 50–70 % pour un travail sensible aux coûts), car au-delà de ce point vous dépensez de l'argent pour des gains qui s'amenuisent. Pour augmenter le plafond, vous devez réduire la fraction série elle-même — les modifications algorithmiques qui augmentent \(p\) rapportent généralement beaucoup plus que simplement ajouter des cœurs.
Termes clés et variables
- Fraction parallèle (\(p\)) — la proportion du travail du programme qui peut être exécutée en parallèle, exprimée en nombre décimal entre 0 et 1. Une valeur de 0,9 signifie que 90 % de la charge de travail peut être répartie entre les processeurs.
- Fraction série (\(1-p\)) — la portion qui doit s'exécuter séquentiellement sur un seul processeur et ne peut pas être accélérée par parallélisation. Cette fraction fixe la limite supérieure absolue sur l'accélération globale.
- Accélération de la partie parallèle (\(s\)) — le facteur par lequel la portion parallélisable est accélérée, généralement égal au nombre de processeurs ou de cœurs qui y sont appliqués.
- Accélération globale — le rapport du temps d'exécution monoprocesseur au temps d'exécution parallèle, \(1/\big((1-p)+p/s\big)\). C'est le gain de performance dans le monde réel.
- Accélération maximale — la limite théorique \(1/(1-p)\) atteinte à mesure que \(s\) croît sans limite, déterminée uniquement par la fraction série.
- Efficacité parallèle — accélération globale divisée par le nombre de processeurs, \(\text{Accélération}/s\), exprimée en pourcentage ; elle mesure l'efficacité avec laquelle chaque processeur est utilisé.
FAQ
Pourquoi ajouter des processeurs offre-t-il des gains décroissants ? Parce que la partie séquentielle devient le goulet d'étranglement. Dès qu'elle prédomine, les processeurs supplémentaires n'apportent presque plus rien.
Qu'est-ce que l'efficacité parallèle ? C'est l'accélération divisée par le nombre de processeurs, exprimée en pourcentage : elle mesure à quel point chaque processeur est réellement exploité.
En quoi cela diffère-t-il de la loi de Gustafson ? La loi d'Amdahl suppose une taille de problème fixe ; la loi de Gustafson, elle, considère que le problème grandit avec le nombre de processeurs, ce qui donne des résultats plus optimistes.