Licence CC BY-NC-ND

Quelques lois sur l'augmentation des performances des ordinateurs

Loi de Moore et compagnie

Plus le temps passe, plus les ordinateurs semblent gagner en performances. Du moins, c'est la théorie. Dans les faits, les augmentations de performances sont devenues particulièrement faibles ces dernières années. Si vous regardez les benchmarks effectués par les divers sites de comparaison de matériel, vous verrez que les performances n'augmentent réellement qu'assez peu.

Pourtant, on entend souvent certains dire que la performance des ordinateurs augmente tous les 18 mois ou tous les deux ans : il s'agit d'une interprétation fréquente de la loi de Moore. Mais alors pourquoi cette augmentation de performance n'est-elle pas visible dans les benchmarks ? Pour le comprendre, il va falloir étudier plus en détail la loi de Moore, ainsi que d'autres lois affiliées.

Équation de la performance d'un processeur

Le temps que met un programme pour s’exécuter dépend :

  • du temps mis par le processeur pour exécuter ses instructions ;
  • du temps passé à attendre des données en provenance de cette feignasse de mémoire ;
  • et du temps passé à attendre que ces *%¨"#|-[ de périphériques fassent ce qu'on leur demande !

Dans la réalité, vous pouvez être certains que votre programme passera les 3/4 de son temps à attendre la mémoire et les périphériques. La situation actuelle est telle qu'il est impossible de créer des programmes rapides sans prendre en compte la hiérarchie mémoire.

Dans cet article, on ne va s'intéresser qu'au processeur. Le temps pris par un programme pour exécuter ses instructions, qu'on notera $T$, dépend :

  • du nombre moyen $N$ d'instructions exécutées par notre programme ;
  • du nombre moyen de cycles d'horloge nécessaires pour exécuter une instruction, qu'on notera $CPI$ (ce qui est l'abréviation de Cycle Per Instruction) ;
  • et de la durée $P$ d'un cycle d'horloge.

$$ T = N × CPI × P $$

On peut récrire cette équation en remplacant la durée d'un cycle d'horloge par la fréquence (l'inverse de cete durée), ce qui donne la formule suivante.

$$ T = \frac{N × CPI}{F} $$

Cette équation nous dit qu'augmenter la performance d'un processeur demande :

  • soit de diminuer le nombre d'instructions d'un programme ;
  • soit de diminuer le nombre de cycles par instruction ;
  • soit d'augmenter la fréquence.

Augmenter la fréquence

Pour augmenter la fréquence, il faut utiliser des composants électroniques plus rapides. Presque tous les composants d'un ordinateur sont fabriqués avec un grand nombre de transistors. Un transistor est simplement un composant relié à un circuit électronique par trois morceaux de "fil" conducteur que l'on appelle broches : la grille, le drain et la source. Dans les processeurs, on utilise notre transistor comme un interrupteur qui réagit en fonction de sa grille : suivant la tension appliquée sur la grille, le transistor conduira ou ne conduira pas le courant entre la source et le drain.

Représentation d'un transistor

Miniaturisation et fréquence

Diminuer la taille des transistors permet de les rendre plus rapides. C'est un scientifique du nom de Robert Dennard qui a découvert un moyen de rendre un transistor plus rapide en diminuant certains de ses paramètres physiques. De plus, la vitesse de transmission des bits dans les fils d'interconnexions est proportionnelle à leur longueur : plus ces fils seront courts, plus la transmission sera rapide. Ce qui est clairement un second effet positif de la miniaturisation sur la fréquence.

Et il se trouve qu'il existe des lois concernant l'évolution de la miniaturisation des transistors dans le temps. En 1965, le cofondateur de la société Intel, spécialisée dans la conception de mémoires et de processeurs, a affirmé que la quantité de transistors présents dans un processeur doublait tous les 18 mois. Cette affirmation porte aujourd'hui le nom de première loi de Moore. En 1975, le cofondateur d'Intel réévalua cette affirmation : ce n'est pas tous les 18 mois que le nombre de transistors d'un processeur double, mais tous les 24 mois. Cette nouvelle version, appelée la seconde loi de Moore, a redoutablement bien survécu : elle est toujours valable de nos jours.

Illustration de la loi de Moore - image libre de droits

On pourrait croire que doubler le nombre de transistors signifie diviser par deux les dimensions d'un transistor et donc doubler la fréquence. En réalité, les transistors et les fils sont réunis sur une surface : qui dit diminution par deux de la surface signifie division par $\sqrt{2}$ des cotés de cette surface. Ainsi, les dimensions des transistors et des fils sont divisés par $\sqrt{2}$. Ce faisant, la fréquence des processeurs est multipliée par $\sqrt{2}$ tous les deux ans, ce qui donne environ 40% de performances en plus tous les deux ans.

Du moins, c'est la théorie… En réalité, cette augmentation de 40% n'est qu'une approximation : la fréquence effective d'un processeur dépend fortement de sa conception (de la longueur du pipeline, notamment) et des limites imposées par la consommation thermique.

Miniaturisation et efficacité énergétique

Avec le temps, il est devenu de plus en plus difficile de monter en fréquence. En effet, augmenter la fréquence a tendance à faire chauffer le processeur : on observe donc une augmentation de la consommation énergétique des processeurs au fil du temps. Et aussi bizarre que cela puisse paraitre, l'efficacité énergétique de nos processeurs n'a pas cessé d'augmenter : pour le même travail, les processeurs chauffent moins. Plus précisément, l'efficacité énergétique double tous les 1,57 ans : c'est la loi de Kommey.

Image de Jon Koomey, CC-BY-SA 3.0, wikicommons

Augmenter le CPI

Les hausses de performances peuvent aussi provenir de la micro-architecture des processeurs. L'ajout d'unités de calcul, de meilleures unités de prédiction de branchements, et autres ajouts de circuits sont une source importante d'augmentation de performance. Toutes ces optimisations diminuent le $CPI$, à savoir le nombre de cycle d'horloge par instruction. Elles procédent de deux manières :

  • diminuer le temps mis pour effectuer une instruction ;
  • augmenter le nombre d'instructions exécutées en même temps.

Un seul coeur : la loi de Pollack

La seconde solution consiste à exécuter plusieurs instructions à la fois, à augmenter le débit d’instructions. Or, la loi de Pollack dit que cette augmentation de performances est approximativement proportionnelle à la racine carrée du nombre de transistors ajoutés : si on double le nombre de transistors, la performance est multipliée par $\sqrt{2}$. En utilisant la loi de Moore, on en déduit qu'on gagne approximativement 40% de performances tous les deux ans. En ajoutant ces gains aux gains provenant de l'augmentation en fréquence, on gagne tout au plus 80% de performances en plus tous les deux ans (deux fois 40%).

On peut expliquer cette loi de Pollack assez simplement. Il faut se rappeler que les processeurs modernes peuvent changer l'ordre des instructions pour gagner en performances (on parle d'éxecution dans le désordre). Pour cela, les instructions sont pré-chargées dans une mémoire tampon, de taille fixe. Cependant, le processeur doit gérer les situations où une instruction a besoin du résultat d'une autre pour s'exécuter : chaque instruction doit être comparée à toutes les autres, pour savoir quelle instruction a besoin des résultats d'une autre. Avec $N$ instructions, vu que chacune d'entre elles doit être comparée à toutes les autres, ce qui demande $N^2$ comparaisons. En doublant le nombre de transistors, on peut donc doubler le nombre de comparateurs, ce qui signifie que l'on peut multiplier le nombre $N$ d'instructions par $\sqrt{2}$.

Même chose pour les processeurs superscalaires, qui peuvent démarrer $N$ instructions simultanément : l'analyse mathématique nous dit que le nombre de transistors nécessaire pour exécuter simultanément $N$ instructions avec une mémoire tampon capable de mémoriser $M$ instructions demande $N^2 \times M^2$ portes logiques/transistors. On retrouve donc la loi de Pollack : multiplier par $X$ le nombre de transistors permet juste d’exécuter $\sqrt{X}$ instructions simultanées en plus et de garder $\sqrt{X}$ instructions en attente en plus.

Multicœurs : contourner la loi de Pollack

On peut cependant contourner la loi de Pollack, qui ne vaut que pour des processeurs mono-cœur. Mais en utilisant plusieurs cœurs, la performance est la somme des performances individuelles de chaque cœur. Ainsi, doubler le nombre de transistors permet de doubler le nombre de cœurs et donc de doubler la performance. Ce qui est mieux qu'une amélioration de 40%. On voit donc qu'augmenter le nombre de cœurs est plus rentable que d'augmenter le débit de chaque cœur : cela permet de contourner la loi de Pollack. On comprend pourquoi les constructeurs n'ont de cesse d'augmenter le nombre de cœurs de nos processeurs…


Toutes ces augmentations de performances, c'est bien beau, mais il existe une loi qui vient jouer les troubles-fêtes. La loi de Wirth nous dit que le logiciel ralentit toujours plus vite que le matériel. Évidemment, cette loi est assez approximative, et le créateur de cette loi (qui a aussi créé le langage Pascal) ne tire pas cette loi d'expériences ou de statiques (contrairement à toutes les autres lois). Mais avouez qu'elle a une part de vérité !

14 commentaires

Merci pour cet article qui vient nous éclairer sur les différentes théories de l'augmentation de performances. Cette loi de Wirth n'est pas totalement fausse, car certains éditeurs ne font des logiciels qui ne peuvent être supporté par le matériel existant..

+0 -0

Tu as aussi un problème de dépendances pour un processeur multi-coeur : si j'ai une série d'instructions à exécuter, dont chaque instruction dépend de l'instruction précédente, un processeur multi-coeur ne sera pas plus performant qu'un processeur mono-coeur pour l'effectuer.

La raison pour laquelle les constructeurs privilégient l'augmentation du nombre de coeurs plutôt que l'augmentation de fréquence est que pour atteindre une même performance (globale), c'est moins coûteux de le faire par augmentation de coeur que par augmentation de fréquence ; mais un 2 * 3 GHz n'est pas 2 fois plus performant qu'un 3 GHz.

Tu as aussi un problème de dépendances pour un processeur multi-coeur : si j'ai une série d'instructions à exécuter, dont chaque instruction dépend de l'instruction précédente, un processeur multi-coeur ne sera pas plus performant qu'un processeur mono-coeur pour l'effectuer.

La raison pour laquelle les constructeurs privilégient l'augmentation du nombre de coeurs plutôt que l'augmentation de fréquence est que pour atteindre une même performance (globale), c'est moins coûteux de le faire par augmentation de coeur que par augmentation de fréquence ; mais un 2 * 3 GHz n'est pas 2 fois plus performant qu'un 3 GHz.

uregoismyfriend

Tout dépend de ce que l'on fait avec le processeur ;)

Si tu fait tourner deux processus totalement indépendants, ils iront deux fois plus vite que si tu les fait tourner sur un seul coeur ..

Ou ajoutent des effets consommateurs inutiles.

Par exemple sous PowerPoint 2013, quand on tape une lettre, elle ne se contente plus d'apparaître d'un coup : le curseur glisse sur le côté comme s'il découvrait la lettre.

SpaceFox

Pas que. Le multimédia est en grande partie responsable de cet état de fait. Peu à peu les couleurs sont devenues réalistes, support de la transparence, images vectorielles… Ces ajouts successifs nécessitent plus de RAM et de puissance de calcul pour les traiter. Ajoute à cela que les capteurs sont de plus en plus pointus, une photo ou un film a de plus en plus de pixels qu'il faut aussi traiter. La musique aussi est de moins en moins compressée avec pertes ce qui nécessite de l'espace disque et de la puissance de calcul pour décoder tout ça.

La preuve que ces éléments sont non négligeables, la plupart des processeurs sont obligés d'avoir une partie pour accélérer le décodage du son et de la vidéo.

Le poids de ce multimédia se reflète dans les interfaces graphiques de plus en plus sophistiqués : plus d'effets, transparence, d'ombrage et autres.

Fondamentalement, l'usage de l'informatique bureautique n'a pas été révolutionnée par tout ceci, qui n'est qu'un confort et d'esthétisme.

+2 -0

La musique aussi est de moins en moins compressée avec pertes ce qui nécessite de l'espace disque et de la puissance de calcul pour décoder tout ça.

Au contraire, moins tu compresse, moins tu as besoin de puissance de calcul. Ok pour l'espace disque par contre.

Article intéressant, je ne connaissais pas la Loi de Pollack !

Petite question, si on met en relation la Loi de Kommey avec l'augmentation de la fréquence, on pourrait continuer à augmenter la fréquence non ? Je m'explique. Si je ne me trompe pas, après le Pentium 4 (à l'époque où Intel promettait d'atteindre le 10Ghz), la fréquence n'a plus réellement augmenté. Actuellement on reste bloqué aux environs de 4Ghz maximum (si on omet l’overclocking).

Et après le Pentium 4, on a eu la sortie des processeurs multicoeurs pour continuer à améliorer les performances.

Mais, si, comme le dit la Loi de Kommey, on arrive à améliorer l'efficacité énergétique des processeurs, on peut alors augmenter leur fréquence non ? Ces derniers chauffent de moins en moins, du coup on pourrait augmenter leur fréquence, et ce de manière graduelle pour équilibrer chauffe/fréquence du processeur.

+0 -0

@Prechan Je ne sais pas non plus d'où sort la loi de Pollack, mais ce qu'il faut bien comprendre que ça soit pour Moore ou Koomey - bien que le terme loi puisse porter à confusion -, c'est qu'elles ne sont que des prédictions basées sur des observations.

L'augmentation du nombre de transistors ne s'accompagne plus de la même augmentation de performance que dans le passé : si avant doubler le nombre de transistors permettait de gagner 40% de performance, avec une augmentation de chaleur dégagée de 200%, le ratio n'est plus le même aujourd'hui (la performance augmente moins et la chaleur dégagé augmente plus). Alors qu'augmenter le nombre de coeurs augmente linéairement la chaleur dégagée.

Notons tout de même qu'un 3Ghz d'aujourd'hui, même en mono-coeur, reste quand même largement plus performant qu'un 3Ghz d'il y a cinq ans ! Ca s'explique par ce qui est écrit dans l'article :

Les hausses de performances peuvent aussi provenir de la micro-architecture des processeurs. L'ajout d'unités de calcul, de meilleures unités de prédiction de branchements, et autres ajouts de circuits sont une source importante d'augmentation de performance.

mais un 2 * 3 GHz n'est pas 2 fois plus performant qu'un 3 GHz.

uregoismyfriend

Du point de vue matériel, si. Après, nombre de logiciels ne sont pas adaptés au multicoeur et ne peuevtn aps profiter de la puissance de calcul, mais c'est une autre histoire.

Tu as aussi un problème de dépendances pour un processeur multi-coeur

uregoismyfriend

Non, le processeur multicœur n'a pas à détecter les dépendances. Cette détection des dépendances est réalisée par le programmeur, lorsqu'il conçoit une application parallèle : le matériel exploite du parallélisme déjà extrait par le programmeur sous forme de threads. Alors que pour un CPU mono-coeur, cette exploitation du parallélisme demandera au processeur d’extraire lui-même le parallélisme, et c'est ces circuits de détection des dépendances qui bouffent du circuit en $O(N^2$).

La raison pour laquelle les constructeurs privilégient l'augmentation du nombre de coeurs plutôt que l'augmentation de fréquence est que pour atteindre une même performance (globale), c'est moins coûteux de le faire par augmentation de cœur que par augmentation de fréquence ;

uregoismyfriend

La fréquence avait déjà commencé à "stagner" plusieurs années avant que les premier multicœurs arrivent sur le marché. Et pourtant, on avait des améliorations de performances dues à l'amélioration des micro-architectures, améliorations limitées par la loi de Pollack.

Sinon, pour répondre à Prechan : en réalité, les fréquences augmentent toujours un petit peu, mais moins qu'avant (j'ai pas les chiffres exacts en tête). On n'a pas des +40% tous les deux ans, mais une augmentation plus modeste. Il faut dire que les constructeurs préfèrent baisser les tensions d'alimentation des transistors, histoire de diminuer la consommation énergétique, et cela a un impact négatif sur les fréquences.

La musique aussi est de moins en moins compressée avec pertes ce qui nécessite de l'espace disque et de la puissance de calcul pour décoder tout ça.

Au contraire, moins tu compresse, moins tu as besoin de puissance de calcul. Ok pour l'espace disque par contre.

Kje

Pas forcément, faire de la compression sans perte nécessite des algorithmes évolués pour être efficaces quand la compression avec perte c'est souvent des techniques de bas étages (vas-y qu'on détruit par des filtres les hautes et basses fréquences pour enlever de l'information peu utile).

+0 -0

Du point de vue matériel, si. Après, nombre de logiciels ne sont pas adaptés au multicoeur et ne peuevtn aps profiter de la puissance de calcul, mais c'est une autre histoire.

Dans ton article tu parles d'augmenter la performance d'un processeur en diminuant le nombre d'instruction. Il me semble que ce que tu entends par performance d'un processeur ici ça n'est pas la performance du point de vue matériel, si ?

Non, le processeur multicœur n'a pas à détecter les dépendances. Cette détection des dépendances est réalisée par le programmeur, lorsqu'il conçoit une application parallèle : le matériel exploite du parallélisme déjà extrait par le programmeur sous forme de threads. Alors que pour un CPU mono-coeur, cette exploitation du parallélisme demandera au processeur d’extraire lui-même le parallélisme, et c'est ces circuits de détection des dépendances qui bouffent du circuit en $O(N^2$).

Je n'ai pas dit que c'était à lui de détecter les dépendances, seulement que tu as aussi des problèmes de dépendances lorsque tu veux utiliser plusieurs coeur en même temps. Si ton programme est complètement séquentiel ça ne sert à rien d'avoir plusieurs coeurs.

Dans ton article tu parles d'augmenter la performance d'un processeur en diminuant le nombre d'instruction. Il me semble que ce que tu entends par performance d'un processeur ici ça n'est pas la performance du point de vue matériel, si ?

uregoismyfriend

Si si, je me focalise uniquement sur le matériel. Quand je parle de diminuer le nombre d'instructions, je parle uniquement des jeux d'instructions, et notamment de la différence entre CISC et RISC : je ne parle pas des améliorations des compilateurs ou des langages, ou de tout ce qui est logiciel.

Je ne sais pas si c'est cela qui t'a induit en erreur, mais c'est cela que j'appelle performance d'un processeur dans tout l'article. Si cela n'avait pas été le cas, j'aurais mentionné la loi de Proebsting dans l'article, qui stipule que les améliorations des compilateurs permettent de doubler les performances tous les 18 ans (mon dieu…) !

Tu dis

Plus formellement, avec un nombre C de cœurs, et en supposant que les cœurs soient identiques, chaque cœur contiendra $\frac{N}{C}$ transistors.

Je ne suis pas vraiment d'accord avec la formule : en ayant des cœurs séparés, on n'a plus la contrainte du temps de propagation à travers l'ASIC, on peut agrandir l'ASIC et faire C cœurs de N transistors. Dans les faits, C est limité par la nécessité d'ajouter un système type Snoop Control Unit (dans le jargon de ARM), pour assurer le partage des ressources entre les cœurs, mais, finalement, ce n'est lié qu'à notre incapacité à répartir le travail sur plusieurs cœurs en ayant une totale indépendance des données. La solution du multi-cœur est comme celle du multi-processeur, en théorie, elle n'a pas de limite, et, dans la pratique, on fait quand même des ordinateurs avec 32000 processeurs. Je pense que, pour ce genre de loi, il vaut mieux se concentrer sur les performances d'un cœur plutôt que d'étudier les performances d'un processeur, qui est une notion très débattue, surtout dans des tests comparatifs

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte