Abonnez-vous à Universalis pour 1 euro

ORDINATEURS

Article modifié le

Les améliorations de l'architecture de von Neumann

Les performances des ordinateurs ont connu une progression spectaculaire puisque les vitesses de calcul ont approximativement décuplé tous les cinq ans. Toutefois, les améliorations technologiques successives n'ont que peu modifié l'organisation interne des processeurs.

Dans le modèle de von Neumann, les performances de la mémoire conditionnent les performances du système tout entier, puisque toutes les informations transitent par elle. Les techniques décrites ci-après ont donc été développées pour améliorer les performances de la mémoire et pour introduire un parallélisme plus ou moins important dans l'exécution des instructions. Ces techniques peuvent se combiner entre elles dans un même ordinateur, afin d'en augmenter les performances, sans pour cela modifier la durée du cycle de base du processeur.

Les machines RISC

Pour être exécutées efficacement, les instructions doivent être simples et rapides à décoder. L'étape ID doit être la plus réduite possible. Par ailleurs, il importe de limiter le nombre de portes logiques à traverser lors des transferts élémentaires. Les processeurs modernes se caractérisent par un grand nombre de registres, afin de limiter les accès à la mémoire. Seules les instructions de chargement (load) et de rangement (store) font directement référence à la mémoire, lors de l'étape MEM. L'effort d'optimisation de l'exécution des instructions doit porter sur les instructions réellement utilisées dans un programme. Avant de figer une architecture de processeur, une étude statistique a permis de dégager les instructions les plus utilisées.

Au début des années 1980, de nouvelles architectures intégrant ces optimisations ont été baptisées machines RISC (Reduced Instruction Set Computer). Leur avènement a réduit les temps de conception des machines et grandement simplifié l'écriture des compilateurs. Par contraste, les machines antérieures, dotées d'un jeu d'instructions complexe, ont été rebaptisées machines CISC (Complex Instruction Set Computer).

Abonnez-vous à Universalis pour 1 euro

Les architectures RISC ne se caractérisent pas seulement par un jeu d'instructions limité (essentiellement constitué d'opérations entre registres et d'opérations de transfert entre la mémoire et les registres), mais également par un grand nombre de registres (jusqu'à 512 registres, voire plus). Les instructions sont de longueur fixe (32 ou 64 bits) pour un décodage rapide.

Notion de pipeline

Le principe du pipeline est connu depuis longtemps en informatique, puisqu'il a été utilisé sur les premiers ordinateurs scientifiques. L'exécution d'une instruction sous le contrôle de l'unité de commande passe par plusieurs étapes, à l'image d'une chaîne de montage automobile.

Une étude plus approfondie de l'enchaînement des micro-instructions pour une instruction donnée montre que chaque étape consiste à récupérer des données binaires depuis un ou plusieurs registres source, à les modifier de manière combinatoire puis à les ranger dans un ou plusieurs registres destination. La figure 5a montre que l'exécution d'une instruction RISC se traduit par une succession cohérente de transferts élémentaires entre plusieurs couches successives de registres.

Abonnez-vous à Universalis pour 1 euro

Si l'on parvient à rendre les étapes de durée égales et à les réaliser par des ressources matérielles distinctes, il devient alors possible de traiter plusieurs instructions en parallèle, et de supprimer complètement le microprogramme. En répartissant les traitements effectués initialement par l'unité de commande dans les différents étages, on augmente ainsi de manière significative le débit entrant des instructions dans le processeur : au lieu d'exécuter une instruction tous les 4 ou 5 cycles d'horloge comme dans la version microprogrammée, une nouvelle instruction peut être commencée à chaque cycle de base. La figure 5b montre comment plusieurs instructions sont démarrées à chaque cycle d'horloge. Le CPI (cycle par instruction) est le nombre apparent de cycles nécessaires à l'exécution d'une instruction. Dans la version microprogrammée, le CPI valait 4 ou 5 ; il passe à 1 dans la version pipelinée. On appelle processeur scalaire un processeur pipeliné qui, en régime permanent, termine l'exécution d'une instruction à chaque cycle de base, bien que l'exécution de chaque instruction dure plusieurs cycles. La figure 5b montre un exemple de processeur pipeliné à cinq étages : au cycle 4, tous les étages du pipeline travaillent sur cinq instructions différentes. La réalisation pratique d'un pipeline est délicate : elle résulte d'un compromis entre le nombre d'étages qui le composent et la manière dont l'exécution des instructions est décomposée en sous-opérations indépendantes. Les processeurs modernes contiennent des pipelines qui peuvent atteindre 20 étages, et le processeur Intel Pentium 4 Prescott en possède 31.

Les machines superscalaires

Si les machines RISC ont été conçues pour exécuter une instruction par cycle de base, les processeurs superscalaires réalisent l'objectif encore plus ambitieux d'exécuter plusieurs instructions par cycle. Pour cela, ces processeurs sont dotés de plusieurs unités de calcul pipelinées, générales ou spécialisées dans l'exécution d'un type d'opération (addition de nombres entiers, multiplication de nombres entiers, addition de nombres en virgule flottante, multiplication de nombres en virgule flottante, etc.). Un processeur superscalaire acquiert et décode simultanément plusieurs instructions, et lance leur exécution en parallèle sur les différentes unités. La figure 5c montre un processeur superscalaire d'ordre 2 capable d'exécuter deux instructions par cycle. Au cycle 4, le processeur traite dix instructions en parallèle.

L'efficacité d'un processeur superscalaire dépend étroitement de l'ordonnancement des instructions, puisqu'il faut pouvoir alimenter en permanence les unités de calcul, afin d'exploiter pleinement leurs structures pipelinées (par exemple, le programme doit posséder un nombre suffisant d'instructions faisant appel aux différents opérateurs disponibles). Il faut donc utiliser des compilateurs réorganisant et optimisant la séquence d'instructions de façon à exploiter au mieux les ressources matérielles.

Techniques d'exécution dans les processeurs superscalaires

D'autres techniques très pointues sont exploitées dans les processeurs superscalaires : l'exécution dans le désordre, la prédiction de branchement et l'exécution anticipée. Ces techniques se combinent pour améliorer notablement la vitesse d'exécution des instructions.

L'exécution dans le désordre (out of order execution) est une technique utilisée afin d'alimenter au mieux les différents pipelines. Pour améliorer le rendement des unités de calcul, les processeurs superscalaires sont dotés d'une unité interne de réordonnancement des instructions, qui analyse les dépendances des instructions entre elles avant de déclencher l'exécution des instructions indépendantes dans les unités de calcul disponibles.

Abonnez-vous à Universalis pour 1 euro

La prédiction de branchement (branch prediction) part du constat suivant : l'efficacité d'un pipeline dépend étroitement de la structure du programme et du nombre d'instructions de sauts qui le compose. En effet, toute instruction de saut entraîne une rupture de séquence, donc un défaut temporaire d'alimentation du pipeline, qu'il faut réamorcer avec une nouvelle suite d'instructions. En conservant un historique des branchements effectués et de leur fréquence, le processeur peut prédire de manière fine les ruptures d'alimentation des pipelines pour garder un CPI aussi faible que possible.

L'exécution anticipée (speculative execution) est une optimisation complexe qui renforce l'unité de prédiction de branchement. Elle fait exécuter au processeur les instructions qui se trouvent après une instruction de saut, même si celle-ci n'a pas encore été exécutée. Le processeur se comporte de manière optimiste et garde un pipeline constamment rempli, tant que l'unité de prédiction ne vient pas remettre en question ces hypothèses.

Notions de mémoire virtuelle et mémoire cache

La mémoire virtuelle fut utilisée dans les premières générations de machines pour remédier au manque chronique d'espace mémoire pour stocker les programmes et les données. Elle est maintenant plutôt employée pour donner l'impression à une application qu'elle est la seule dans le système et qu'elle peut accéder librement à tout l'espace mémoire. Elle protège ainsi le système d'exploitation des erreurs et des malveillances, tout en évitant que les applications interfèrent les unes avec les autres.

Une mémoire cache ou antémémoire est une mémoire intermédiaire située entre le processeur et la mémoire principale. Elle possède un temps d'accès proche du cycle de base du processeur, mais sa taille est très réduite par rapport à celle de la mémoire principale. Une information contenue dans le cache est de ce fait plus rapidement utilisable par le processeur qu'une information située en mémoire principale. Un cache contient la copie d'une portion de la mémoire principale. Le processeur utilise un cache pour les instructions (cache d'instructions) et un pour les données (cache de données).

Abonnez-vous à Universalis pour 1 euro

Le processeur cherche systématiquement dans le cache la prochaine instruction à exécuter. Si elle se trouve dans le cache, le processeur la traite en un cycle de base. Dans le cas contraire, le cache déclenche la lecture en mémoire principale avant de transmettre l'instruction au processeur. La lecture en mémoire principale provoque le chargement dans le cache d'une zone mémoire contenant l'instruction ainsi que les 4, 8 ou 16 instructions voisines (cf. mémoires numériques).

Le gain en performances apporté par un cache résulte du principe de localité : pour la plupart des programmes, 90 p. 100 du temps d'exécution est utilisé pour exécuter 10 p. 100 des instructions. Cela signifie que certaines portions d'un programme sont très fréquemment exécutées. Les performances du processeur sont fortement améliorées lorsque ces portions de programme sont présentes dans le cache. L'ensemble constitué par les registres du processeur, la mémoire cache et la mémoire principale représente le sommet de la hiérarchie mémoire. Plus on descend dans la hiérarchie, plus l'accès à l'information est coûteux en nombre de cycles. Il est même possible d'inclure plusieurs niveaux de cache (par exemple les caches L1 et L2 de premier et deuxième niveau) pour optimiser encore plus les temps d'accès.

Les processeurs vectoriels et les techniques de vectorisation

Les machines scientifiques très puissantes, conçues pour travailler efficacement sur les vecteurs, possèdent des unités fonctionnelles commandées par un jeu d'instructions spécifiques, afin d'effectuer simultanément une même opération (par exemple, une addition), sur un grand nombre de données (les composantes des deux vecteurs à additionner). Ces machines utilisent généralement des processeurs superscalaires spécialisés, ou processeurs vectoriels. Il suffit donc de préciser l'opération à effectuer et l'emplacement des composantes en mémoire pour que l'unité fonctionnelle du processeur vectoriel exécute seule l'opération sur toutes les composantes des vecteurs à traiter. Les unités fonctionnelles peuvent être soit spécialisées, c'est-à-dire qu'elles ne peuvent exécuter qu'un type d'opération donné (par exemple, une addition en virgule flottante), soit générales. Dans ce cas elles sont susceptibles d'exécuter diverses fonctions d'évaluation (aussi bien une addition qu'une multiplication ou une division).

L'efficacité d'une unité fonctionnelle dépend très étroitement du rapport entre le temps nécessaire au chargement des données/déchargement des résultats et la durée de l'opération elle-même. Plus ce rapport est faible et plus les performances d'un processeur vectoriel sont importantes devant celles d'un processeur scalaire (machines ne disposant pas de ressources matérielles spéciales pour le traitement des vecteurs). Ainsi, les performances d'un processeur vectoriel dépendent-elles beaucoup de la manière de le programmer.

Abonnez-vous à Universalis pour 1 euro

La vectorisation est une méthode de programmation qui permet d'utiliser le plus efficacement possible les dispositifs existant dans les machines vectorielles. Certains ont en effet évalué que les rapports de vitesses dans une machine vectorielle entre un programme bien écrit et un programme mal écrit pouvaient aller de 1 à 100. Cela montre l'intérêt des techniques algorithmiques qui conduisent à une écriture des programmes et à des représentations de données complètement différentes des techniques habituellement employées dans les machines scalaires. À la limite, il faudrait entièrement réécrire les programmes anciens pour exploiter pleinement les performances des machines vectorielles. Pour éviter un tel gaspillage de logiciels, des compilateurs vectoriseurs transforment les anciens programmes en programmes exécutables sur les nouvelles machines. Les compilateurs optimiseurs peuvent également aider le programmeur peu habitué aux techniques de vectorisation. La vectorisation automatique ainsi obtenue ne peut prétendre rivaliser avec les meilleurs programmes écrits spécialement en fonction de la machine sur laquelle le programme est exécuté, mais elle représente une solution de compromis, qui permet l'utilisation des programmes scientifiques très complexes ou très volumineux, écrits pour des processeurs scalaires.

Les processeurs modernes

Les processeurs modernes intègrent maintenant des centaines de millions de transistors et exploitent toutes les optimisations précédentes. En particulier, le circuit processeur contient des mémoires cache de grande capacité. Jusqu'au début de ce millénaire, les principaux fabricants de processeurs ont misé sur les puissances de calcul brut et ont cherché à accroître la fréquence de leurs processeurs. On a ainsi créé des processeurs fonctionnant à 4 gigahertz, c'est-à-dire avec un cycle de base de 250 picosecondes (soit 0,000 000 000 25 s), dissipant une puissance de 100 watts. La course à la fréquence s'est arrêtée récemment, les constructeurs ayant atteint certaines limites technologiques (problèmes d'évacuation de la puissance dissipée, comportement quantique des transistors). Aujourd'hui, le nombre de cœurs de processeur (processor core) que l'on peut mettre simultanément sur le même circuit intégré constitue l'enjeu industriel majeur. On trouve couramment des processeurs à deux cœurs (dual core), à quatre cœurs (quadri core) ou même à seize cœurs (hexa core). Ce changement radical de stratégie a des conséquences profondes sur la programmation des applications, puisque l'on passe d'un modèle de programmation séquentiel à un modèle de programmation parallèle beaucoup plus complexe à appréhender pour le programmeur.

Performances des processeurs et des systèmes

Depuis les débuts de l'informatique, les concepteurs d'ordinateurs ont cherché à évaluer et à comparer la vitesse d'exécution des processeurs, grâce à des unités de mesure comme le nombre d'instructions par seconde (IPS), le nombre d'opérations par seconde (OPS) ou encore le nombre d'opérations flottantes par seconde (FLOPS) et leurs multiples (kilo, méga, téra...). Ultérieurement furent définis les dhrystones, les whetstones...

Le MIPS (million d'instructions par seconde) représente le nombre de millions d'instructions qu'un processeur exécute en une seconde. Les MOPS ou les MFLOPS (lire méga-FLOPS) s'utilisent pour les programmes contenant de nombreux calculs scientifiques. Toutefois, les valeurs obtenues avec ces unités ne sont pas représentatives du fonctionnement d'un processeur, car on peut obtenir un pic (en MIPS ou en MFLOPS) maximal en concevant des programmes sans rapport avec des applications réelles. Par ailleurs, les performances des ordinateurs dépendent beaucoup de celles des hiérarchies de mémoire, ce qui n'apparaît pas dans le nombre d'instructions ou d'opérations que peut exécuter un processeur. L'idée de concevoir des jeux de programmes standard pour comparer des architectures de machines très différentes s'est vite imposée. Dès les années 1960, dans la ville de Whetstone en Angleterre (le nom de cette petite ville est resté attaché au banc d'essai lui-même), B. Wichmann conçut un banc d'essai (benchmark) qui mesure la vitesse d'exécution de programmes comportant des instructions en virgule flottante, des calculs sur des entiers, des scalaires et des vecteurs. Les performances sont exprimées en MWIPS (Millions of Whetstone Instructions Per Second).

Abonnez-vous à Universalis pour 1 euro

À la fin des années 1980 et au début des années 1990, on s'aperçut que Whetstone ne mesurait pas correctement les performances des superordinateurs scientifiques. Par ailleurs, il fallait concevoir des outils de mesure des nouvelles architectures de processeurs. De nouveaux bancs d'essai ont donc vu le jour, parmi lesquels Dhrystone. La première version de ce banc d'essai, due à R. P. Weicker en 1984, ne comportait pas d'opérations en virgule flottante et intégrait des programmes écrits en plusieurs langages de haut niveau comportant différentes constructions de programme (appels de procédure, affectations, utilisation de pointeurs...).

Whetstone et Dhrystone sont des bancs d'essai synthétiques encore largement utilisés qui reproduisent le comportement de véritables programmes ; Whetstone convient pour les applications comprenant de nombreux calculs et Dhrystone donne une indication sur l'universalité (general purpose) des processeurs modernes. Tous deux contribuent à l'écriture de compilateurs efficaces.

La SPEC (Standard Performance Evaluation Corporation), une organisation sans but lucratif, fut créée en 1988 pour produire des bancs d'essai (la suite « SPECint ») qui mesurent objectivement les performances des nouveaux systèmes. CPU89 est un élément de cette suite qui tend à remplacer Dhrystone.

Accédez à l'intégralité de nos articles

  • Des contenus variés, complets et fiables
  • Accessible sur tous les écrans
  • Pas de publicité

Découvrez nos offres

Déjà abonné ? Se connecter

Écrit par

  • : maître de conférences à l'université de Paris-VI-Pierre-et-Marie-Curie, ingénieur de l'École polytechnique féminine, docteur-ingénieur
  • : professeur, Sorbonne université

Classification

Médias

Machine à calculer de Charles Babbage - crédits : AKG-images

Machine à calculer de Charles Babbage

E.N.I.A.C. - crédits : AKG-images

E.N.I.A.C.

John von Neumann - crédits : Bettmann/ Getty Images

John von Neumann

Autres références

  • COMMERCIALISATION DES PREMIERS ORDINATEURS

    • Écrit par
    • 217 mots

    En Grande-Bretagne, une grande machine développée à l'université de Manchester, M.A.D.M. (Manchester Automatic Digital Machine), sert de prototype au Mark-1, ordinateur mis au point par la firme Ferranti et commercialisé dès 1951. En même temps, aux États-Unis, John P. Eckert et John W. Mauchly,...

  • PREMIERS ORDINATEURS - (repères chronologiques)

    • Écrit par
    • 1 110 mots

    1904 Le Britannique John Ambrose Fleming invente la diode, premier tube à vide comportant deux électrodes, qui permet de capter et de redresser un signal radio.

    1906 L'Américain Lee De Forest invente la triode, tube à vide à trois électrodes, qui permet d'amplifier un faible courant...

  • AIKEN HOWARD HATHAWAY (1900-1973)

    • Écrit par
    • 506 mots

    L’Américain Howard Aiken fut un des pionniers de l'informatique, concepteur de l'IBM Automatic Sequence Controlled Calculator (ASCC) encore appelé Harvard Mark I.

    Après avoir suivi les cours d'une école technique tout en travaillant la nuit, Howard Hathaway Aiken, né le 9 mars 1900 à...

  • ALGORITHME

    • Écrit par et
    • 5 919 mots
    • 4 médias
    ...fondateur dans la définition des principes théoriques de l’informatique. Mais c’est par la conception, la construction et la diffusion à large échelle des ordinateurs que la pratique informatique a pu pleinement se façonner et contribuer entre autres à l’évolution de la notion d’algorithme. La réalisation...
  • APPLE

    • Écrit par
    • 2 548 mots
    • 2 médias

    Archétype des start-up de la Silicon Valley, la société américaine Apple, fondée en 1976, a gagné fortune et célébrité par ses innovations de rupture, de l’ordinateur Macintosh au téléphone portable iPhone et à la tablette numérique iPad. Associée au talent visionnaire de son président historique,...

  • APPRENTISSAGE PROFOND ou DEEP LEARNING

    • Écrit par
    • 2 646 mots
    • 1 média

    Apprentissage profond, deeplearning en anglais, ou encore « rétropropagation de gradient »… ces termes, quasi synonymes, désignent des techniques d’apprentissage machine (machine learning), une sous-branche de l’intelligence artificielle qui vise à construire automatiquement des connaissances...

  • Afficher les 73 références

Voir aussi