Loi d’Amdahl : accélération et efficacité

Calculez l’accélération parallèle, l’accélération théorique maximale, le temps d’exécution et l’efficacité parallèle avec la loi d’Amdahl pour les systèmes multiprocesseurs.

Saisissez la fraction sérielle de votre programme, le nombre de processeurs et le temps d’exécution initial pour calculer l’accélération et l’efficacité.

Loi d’Amdahl : accélération et efficacité
Calculez l’accélération parallèle, l’accélération théorique maximale, le temps d’exécution et l’efficacité parallèle avec la loi d’Amdahl pour les systèmes multiprocesseurs.

À propos de la loi d’Amdahl

La loi d’Amdahl, formulée par l’architecte informatique Gene Amdahl en 1967, décrit l’accélération théorique obtenue lorsqu’un calcul est parallélisé sur plusieurs processeurs. C’est l’un des principes les plus importants et les plus cités en calcul parallèle, car il fixe une limite supérieure stricte aux gains de performance qu’apporte l’ajout de processeurs, quel que soit leur nombre. La loi part d’une observation simple : tout programme réel comporte deux parties. L’une est intrinsèquement sérielle — elle doit s’exécuter de manière séquentielle, car chaque étape dépend du résultat de la précédente. L’autre est parallélisable — elle peut être divisée en tâches indépendantes et exécutée simultanément sur plusieurs processeurs. La loi d’Amdahl formalise la relation entre ces deux parties. La formule est : S(n) = 1 / (p + (1 − p) / n), où S est l’accélération, p est la fraction du programme qui doit s’exécuter en série (entre 0 et 1), n est le nombre de processeurs et (1 − p) est la fraction parallélisable. Lorsque n tend vers l’infini, le terme (1 − p) / n tend vers zéro et l’accélération tend vers 1/p — l’accélération théorique maximale. Ce maximum dépend entièrement de la fraction sérielle et ne peut pas être dépassé, quel que soit le nombre de processeurs utilisés. Les implications sont fortes. Si 10 % d’un programme doit s’exécuter en série (p = 0.1), l’accélération maximale est 1/0.1 = 10×, peu importe le nombre de processeurs. Si 20 % est sériel, le maximum est 5×. Si 50 % est sériel, le maximum n’est que de 2×. Ajouter davantage de processeurs au-delà d’un certain point produit des rendements décroissants, car la partie sérielle devient le goulet d’étranglement — on parle parfois du « plafond d’Amdahl ». Prenons un exemple concret : un programme prend 3 600 secondes sur un seul cœur, avec 80 % du travail parallélisable (p = 0.2). Avec 8 processeurs, l’accélération est S(8) = 1 / (0.2 + 0.8/8) = 1 / (0.2 + 0.1) = 1 / 0.3 = 3.33×. Le temps d’exécution parallèle est de 3600 / 3.33 = 1080 secondes. Avec 16 processeurs, S(16) = 1 / (0.2 + 0.8/16) = 1 / (0.2 + 0.05) = 4×, et le temps tombe à 900 secondes. Doubler de 8 à 16 processeurs n’améliore les performances que de 20 %, car les 20 % sériels dominent. L’efficacité parallèle est l’accélération divisée par le nombre de processeurs, exprimée en pourcentage : E = S(n)/n × 100 %. Elle mesure dans quelle mesure chaque processeur supplémentaire est utilisé. Une efficacité parfaite (100 %) signifierait que chaque processeur est pleinement exploité — un idéal théorique. En pratique, l’efficacité baisse à mesure que l’on ajoute des processeurs, car la fraction sérielle gaspille du temps processeur. Lorsque l’efficacité descend sous 50 %, ajouter des processeurs coûte plus en matériel que cela n’économise en temps. La loi d’Amdahl suppose que la fraction sérielle p reste constante, quelle que soit la taille du problème. La loi de Gustafson (1988) offre une perspective complémentaire : pour des problèmes plus grands, une plus grande fraction du travail devient parallélisable et l’efficacité reste plus élevée à mesure que le nombre de processeurs augmente. Ensemble, ces deux lois donnent une vision complète de la montée en charge parallèle — la loi d’Amdahl est pessimiste mais décrit correctement le cas à taille fixe, tandis que la loi de Gustafson est plus optimiste et s’applique lorsque la taille du problème croît avec le nombre de processeurs. Les applications pratiques de la loi d’Amdahl incluent la conception d’architectures CPU et GPU, l’allocation de ressources dans le cloud, l’analyse d’algorithmes pour le calcul haute performance et l’estimation du retour sur investissement de l’ajout de processeurs à un système existant. Identifier et réduire la fraction sérielle d’un calcul — grâce à de meilleurs algorithmes, à une réduction des coûts de synchronisation ou à une refonte des structures de données — est le moyen le plus efficace de repousser le plafond d’Amdahl.

Exemples de la loi d’Amdahl

Différents scénarios de parallélisme montrent comment la fraction sérielle limite l’accélération maximale atteignable.

ParamètresAccélérationNotes
p=0.05, n=8, T=1000 s5.93×Faible fraction sérielle (5 %). S(8) = 1/(0.05+0.95/8) = 1/0.1688 = 5.93×. Accélération maximale = 1/0.05 = 20×. Échelle presque linéaire avec 8 processeurs.
p=0.2, n=16, T=3600 sFraction sérielle de 20 %. S(16) = 1/(0.2+0.8/16) = 1/0.25 = 4×. Le temps parallèle = 900 s. L’accélération maximale est limitée à 5×.
p=0.5, n=8, T=1000 s1.6×Forte fraction sérielle (50 %). Même avec 8 processeurs, l’accélération n’est que de 1.6×. L’accélération maximale est de 2×, quel que soit le nombre de processeurs.
p=0.1, n=32, T=7200 s7.8×Fraction sérielle de 10 %, 32 processeurs. S(32) = 1/(0.1+0.9/32) ≈ 7.8×. Accélération maximale = 10×. Au-delà d’environ 16 processeurs, les gains supplémentaires sont minimes.

Comment utiliser le calculateur de loi d’Amdahl

  1. Saisissez la fraction sérielle p — la proportion de votre programme qui doit s’exécuter séquentiellement. Utilisez une valeur entre 0 (entièrement parallèle) et 1 (entièrement sériel). Par exemple, si 15 % de votre programme est sériel, saisissez 0.15.
  2. Saisissez le nombre de processeurs n — le nombre d’unités de calcul parallèle (cœurs, threads, nœuds) que vous utilisez ou prévoyez d’utiliser.
  3. Saisissez le temps d’exécution initial en secondes sur un seul processeur. Cette valeur sert à calculer le temps d’exécution parallèle réel.
  4. Cliquez sur Calculer l’accélération pour voir le ratio d’accélération S(n), l’accélération théorique maximale (1/p), le temps d’exécution parallèle et l’efficacité parallèle.
  5. Ajustez le nombre de processeurs pour explorer les rendements décroissants — essayez de doubler n et observez comment l’accélération évolue par rapport au coût matériel.

FAQ sur la loi d’Amdahl

Que représente la fraction sérielle en pratique ?
La fraction sérielle p inclut toutes les parties d’un programme qui ne peuvent pas être parallélisées : l’initialisation et la finalisation séquentielles, le chargement de données depuis le disque, les barrières de synchronisation entre phases parallèles, la surcharge de communication interprocessus et les sections avec dépendances de données où l’étape N doit se terminer avant que l’étape N+1 ne commence. Même de petites fractions sérielles — comme 5 à 10 % — peuvent plafonner fortement l’accélération maximale atteignable.
Quelle est la différence entre la loi d’Amdahl et la loi de Gustafson ?
La loi d’Amdahl suppose une taille de problème fixe — vous voulez résoudre le même problème plus vite en ajoutant des processeurs. La loi de Gustafson suppose que les processeurs supplémentaires servent à résoudre un problème plus grand dans le même temps. La loi d’Amdahl donne un plafond d’accélération pessimiste pour des charges fixes ; la loi de Gustafson montre que l’efficacité parallèle reste élevée lorsque la taille du problème augmente. Les deux perspectives sont correctes dans leurs contextes respectifs.
L’accélération peut-elle dépasser 1/p en pratique ?
Une accélération superlinéaire — c’est-à-dire une accélération supérieure à n — est parfois observée en raison des effets de cache : lorsqu’un problème est réparti sur plusieurs processeurs, les données de chaque processeur tiennent dans son cache privé, ce qui évite les accès lents à la mémoire principale. Toutefois, au sens asymptotique, l’accélération superlinéaire ne peut pas dépasser la limite d’Amdahl 1/p et s’explique toujours par des effets matériels non pris en compte par le modèle théorique.
Qu’est-ce que l’efficacité parallèle et pourquoi est-elle importante ?
L’efficacité parallèle E = S(n)/n × 100 % mesure la part de la capacité de chaque processeur qui est utilisée de manière productive. Une efficacité de 100 % signifie que chaque processeur ajouté contribue exactement proportionnellement à l’accélération — un idéal théorique. Une efficacité inférieure à 50 % indique que la surcharge de coordination et le goulot d’étranglement sériel absorbent plus de la moitié de la capacité ajoutée, rendant l’ajout de processeurs peu rentable.
Comment réduire la fraction sérielle de mon programme ?
Les techniques courantes incluent l’utilisation de structures de données sans verrou pour réduire les barrières de synchronisation, la refonte des algorithmes pour éliminer les dépendances entre étapes, la mise en pipeline de l’initialisation séquentielle avec le calcul parallèle, l’utilisation d’E/S asynchrones pour superposer le chargement des données au traitement, et le profilage pour trouver les vrais goulots d’étranglement au lieu de deviner. Réduire de moitié la fraction sérielle double l’accélération maximale possible.
La loi d’Amdahl s’applique-t-elle au calcul sur GPU ?
Oui. Les GPU ont des milliers de cœurs de calcul, mais il existe une surcharge sérielle importante liée au lancement des kernels, aux transferts de données entre la mémoire CPU et GPU, et au code de préparation séquentielle. Un programme GPU où les transferts et la préparation représentent 20 % du temps total ne peut pas dépasser 5× d’accélération par rapport au CPU, quelle que soit la puissance de calcul du GPU. Réduire les transferts CPU-GPU et maximiser l’occupation des kernels est l’équivalent GPU de la réduction de la fraction sérielle.