Loi d'Amdahl

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Évolution du gain en vitesse d'exécution d'un programme en fonction du nombre de processeurs pour différentes valeurs de 1-s selon la Loi d'Amdahl

La loi d'Amdahl, énoncée par Gene Amdahl en 1967, exprime le gain de performance qu'on peut attendre d'un ordinateur en améliorant une composante de sa performance. Sous sa forme générale elle indique que le gain de performance égale le temps d'exécution d'une tâche complète sans l'amélioration divisé par le temps d'exécution de la même tâche avec l'amélioration.

Équation[modifier | modifier le code]

Soit :

  • T le temps d'exécution d'un programme sur le système d'origine.
  • Ta le temps d'exécution du même programme sur le système amélioré.
  • s est la fraction du temps T concernée par l'amélioration.
  • Ac est l'accélération obtenue par l'amélioration.
Ta=(1-s)T+\frac{sT}{Ac}

L'accélération globale S obtenue :

S=\frac{T}{Ta}=\frac{1}{(1-s)+\frac{s}{Ac}}

La limite de l'accélération quand Ac tend vers l'infini est :

Smax= \frac{1}{1-s}

Ainsi quand Ac tend vers l'infini le gain de performance tend vers le temps d'exécution d'une tâche complète sans amélioration divisé par la différence entre le temps d'exécution total sans amélioration et la fraction du temps concernée par l'amélioration. Autrement dit le gain de performances globale est limité par la fraction de temps non-concernée par l'amélioration.

Dans sa version originale, la loi d'Amdahl s'articule sur une simple règle de trois. Elle indique le gain de temps que va apporter un système multiprocesseur en fonction :

  • du nombre de processeurs N
  • de la proportion d'activité parallélisable s

le tout en négligeant à ce stade le surcroît d'activité lié à la gestion du parallélisme lui-même. La loi a la forme :

R = \frac{1}{(1 - s) + \frac{s}{N}}

Avec N tendant vers l'infini, on obtient : R = \frac{1}{(1 - s)}.

Ce que montre la loi d'Amdahl, c'est que la fraction du temps d'exécution qui ne peut tirer profit de l'amélioration limite le gain de performance global, quelle que soit la valeur de l'amélioration de la composante.

Un rendement parfois décevant[modifier | modifier le code]

  • Certaines applications comme le traitement d'image tirent un très bon parti du parallélisme. Dans leur cas, s peut se retrouver voisin de 0,95.

Les autres cas se montrent décevants : pour s= 0,5, le passage à un biprocesseur fait gagner 25 % de temps. Le passage à 12 processeurs fait passer ce gain de temps à 45,83 %.

Note : La loi d'Amdahl est considérée ici dans le cas d'un système où tous les processeurs sont consacrés au même utilisateur, et à des threads du même processus. Ce cas ne se rencontre pas toujours. Dans la pratique, les résultats seront bien plus mauvais encore si l'on ne gère pas l'affinité processeur (processor affinity) qui veille à ce que les mêmes processeurs reprennent dans la mesure du possible les mêmes processus, afin d'éviter des rechargements intempestifs de cache.

Un moyen de faire remonter s[modifier | modifier le code]

Un cas où s se retrouve évidemment voisin de 1 est celui où les processeurs exécutent des tâches différentes : étant indépendantes, elles sont ipso facto parallélisables, et de surcroît sans le moindre effort à entreprendre pour assurer cette parallélisation. Les problèmes restent à ce stade que :

  • Le temps écoulé pour une application donnée n'est pas directement réduit : une simulation de quatre heures continuera à faire attendre quatre heures ses résultats (mais sera moins ralentie par les autres processus si elle revendique qu'un processeur lui soit dédié en propre).
  • L'antémémoire et le cache disque se retrouvent plus encombrés de données appartenant à des processus différents, et il faut prévoir leur augmentation de taille en conséquence. Le problème disparaît pour l'antémémoire lorsque celle-ci se trouve sur le microprocesseur lui-même, ce qui règle du même coup les effets d'échelle.

Une autre loi d'Amdahl[modifier | modifier le code]

Une loi plus ancienne d'Amdahl concernait un équilibre observé empiriquement dans les ordinateurs : une instruction par seconde requiert un octet de mémoire et un bit par seconde de capacité d'entrée-sortie. De fait, cette loi semble être restée valable assez longtemps (100 MIPS, 100 Mo de RAM et 100 Mb/s s'observaient vers 2000 et les réseaux gigabit ont commencé à se répandre à peu près en même temps que les mémoires de 1 Go).

Bibliographie[modifier | modifier le code]