Loi N°1 : La loi d'Amdahl

Dans ce POST je vous propose de découvrir la loi d’Amdahl, utilisée pour estimer le gain potentiel de performance lorsqu’on optimise ou parallélise une partie d’un système ou d’un traitement.

Elle s’écrit sous la forme suivante :

Où :

  • S = le gain (accélération)
  • P = Proportion du système parallélisable.
  • N = Nombre de ressources ou threads ajoutés.

Une représentation graphique de S nous aide mieux visualiser les gains obtenus en fonction des 2 paramètres P et N

En lisant ce graphique on comprend immédiatement que dans un premier temps réduire la fraction non parallélisable du code permettra d’obtenir des gains plus significatifs que d’augmenter le nombre de CPU (passage de P=0,2 à 0,5 par exemple fait passer S de 1 à 1,5)) et qu’ensuite le code obtenu tirera plus de profit de l’ajout de processeurs (plus P est élevé et plus la pente de la courbe est forte)

Etudions quelques cas où son application va nous être utile.

Comme cela été dit plus haut, cette loi est intéressante quand on souhaite évaluer l’intérêt de paralléliser une tâche ou estimer le gain potentiel résultant d’un ajout de ressources (CPU, serveurs, etc.).

Elle pourra donc aider dans le choix d’un algorithme, un dimensionnement d’architecture ou l’estimation de l’impact d’un d’investissement.

Envisageons différentes situations concrètes

Premier exemple : un traitement batch (consolidation, agrégation, vidéo)

Prenons un batch dont 80% du code est parallélisable et calculons le gain que l’on peut espérer en augmentant le nombre processeurs du serveur.

Passage de 1 à 4 cpu

La courbe orange du graphique ci-dessus nous indique qu’en passant de 1 à 4 cpu le facteur d’accélération (S) varie de 1 à 2,5 divisant ainsi le temps de traitement par 2,5.

S’il prenait 5h il n’en prendra maintenant plus que 2, soit 3h de moins !

Grisés par l’amélioration obtenue, on envisage maintenant d’ajouter 4 nouveaux cpu.

Passage de 4 à 8 cpu

La même courbe nous indique que le facteur d’accélération variera de 2,5 à 3,33 soit un gain de 1,33 (3,33/2,5) avec un temps de traitement maintenant de 1,5h, et donc seulement une ½ heure de moins !

Ainsi on se rend compte que le retour sur le second investissement (4à8) est beaucoup moins rentable que le premier et que, sauf si les 30 minutes gagnées sont vraiment indispensables, il est peut-être plus judicieux d’utiliser ces 4 cpu ailleurs.

2ème exemple : un processus de commande

Imaginons qu’une entreprise souhaite accélérer un processus interne, la gestion de commandes. Le processus actuel se compose de deux étapes principales :

  1. Saisie des commandes (non automatisable, réalisée par des opérateurs humains, 30 % du temps total).
  2. Validation et traitement (automatisable, réalisée par un logiciel, 70 % du temps total).

Pour améliorer l’efficacité globale, l’entreprise décide d’implémenter un nouveau système automatisé qui accélère la validation et le traitement par un facteur de 10.

Quelle sera l’accélération totale du processus ?

Résultat :

Le graphe ci-dessus nous donne la réponse.

Malgré une amélioration significative de la partie automatisée la vitesse globale du processus sera multipliée par 2,7 et on ne pourra pas espérer dépasser un facteur 3 sans diminuer le temps de traitement de saisie des commandes.

Il faut donc réduire au maximum le temps de traitement humain (saisie, réflexion, décision) pour optimiser le processus global

3ème exemple : la réplication dans un système distribué

Imaginons qu’afin de répartir la charge, on utilise un système distribué avec un mécanisme de réplication des données. (données de sessions par exemple)

Si 10% du temps de traitement est consacré à cette réplication, on constate qu’en faisant tendre la valeur de n vers l’infini S va tendre vers 1/(1-0,9) soit ~10

Si on parvient à réduire ce temps de réplication de 10 à 5% alors S atteint 20.

Cela nous montre que les effets d’un ajout, même massif de ressources, ont une limite !

Conclusion

La loi d’Amdahl permet simplement et clairement d’estimer quantitativement le changement de comportement d’une application en fonction du système sur lequel elle fonctionnera et ainsi d’anticiper d’éventuels problèmes de temps de traitement, ou d’optimiser l’utilisation des ressources disponibles.

Inversement en mesurant (S) sur des systèmes ayant un nombre de cpu différent (1,2,4) elle permet d’évaluer la partie parallélisable du traitement métier et donc de prédire son comportement sur un système au dimensionnement plus important comme celui de la production.

Mais cette loi montre aussi que la parallélisation n’apporte un gain significatif que si la proportion sur laquelle elle s’applique est vraiment majoritaire.

Si vous avez découvert l’existence de cette loi ou si vous l’utilisez régulièrement dites le moi en commentaire.