Interstices


  C'était hier

Le modèle dʼarchitecture de von Neumann

Depuis plus de soixante ans, l’architecture des ordinateurs est conforme à un schéma qui a peu évolué depuis son origine : le modèle dit « de von Neumann ». La naissance de ce modèle, sa diffusion et ses premières mises en œuvre sont un moment-clé de l’histoire de l’informatique.

Le tableau de ce qu’en 1945 on n’appelait pas encore l’informatique présente un paysage contrasté. D’un côté, la notion de calcul effectif a trouvé un cadre rigoureux grâce aux avancées d’une discipline nouvelle née dans les années 1930, la méta-mathématique. Le lambda-calcul du mathématicien Alonzo Church et la machine universelle (abstraite) d’Alan Turing, schémas dont Turing a montré l’équivalence, sont proposés en 1936 comme base de définition de l’algorithme, pièce maîtresse du processus calculatoire. D’un autre côté, plusieurs tentatives indépendantes visent à construire des machines électroniques ou électro-mécaniques capables d’exécuter des calculs complexes à grande vitesse. Les précurseurs en sont John Atanasoff en 1938 aux États-Unis et Konrad Zuse en 1941 en Allemagne.

À gauche, John W. Mauchly (1907-1980) et à droite, J. Presper Eckert (1919-1995)
Photo © Image courtesy of Computer History Museum.

Ces deux courants, celui des mathématiciens et logiciens d'une part, et celui des ingénieurs d'autre part, sont issus de deux mondes séparés et s’ignorent mutuellement. Les travaux de Turing ont sans doute eu une influence sur la conception en 1943-44 du calculateur Colossus à Bletchley Park en Angleterre, mais il s’agit d’une machine spécialisée dont le seul objectif, qui sera d’ailleurs atteint, est le décryptage du code secret de la machine Lorenz, successeur de l’Enigma, utilisée par l’armée allemande. La guerre aura d’autres effets : les autorités allemandes ne soutiendront que modestement les travaux pionniers de Zuse, alors que le département américain de la Défense finance un projet ambitieux lancé en 1943 à l’Université de Pennsylvanie par J. Presper Eckert et John Mauchly. Cet effort aboutira à la construction d’un grand calculateur électronique, l’ENIAC, qui ne sera néanmoins pleinement opérationnel qu’en 1946. À cette même époque (1944), l'informaticien Howard Aiken mène un autre grand projet à Harvard avec la collaboration d’IBM, mais la technique choisie est basée sur l'électromécanique. Bien plus fiable que les tubes électroniques, cette voie ne sera toutefois pas poursuivie, mais l’expérience acquise sera exploitée plus tard par IBM dans la conception de ses premiers ordinateurs.

L'ENIAC (à gauche, le panneau de connexion)
Photo © U.S. Army Photo

L’ENIAC — Electronic Numerical Integrator and Computer — fut le premier calculateur entièrement électronique ayant les mêmes capacités qu’une machine de Turing, aux limites physiques près. Il avait des dimensions imposantes : plus de 20 m de long, 2 m 50 de haut, 30 tonnes. Comportant 18 000 tubes électroniques, il consommait 150 kilowatts. Les données étaient lues sur cartes perforées, mais le programme était représenté sur un support externe, sous la forme d’un panneau de connexion analogue à celui d’un standard téléphonique. Pour programmer une application (initialement, le calcul de tables de tir pour l’artillerie), il fallait faire un plan des connexions nécessaires, puis procéder au câblage physique, un travail long, fastidieux, et sujet aux erreurs. La détection et la correction des fautes étaient également laborieuses. Avec la fiabilité réduite des tubes électroniques, ce mode de programmation constituait le grand point faible du projet. Bien conscients de cette faiblesse, ses concepteurs ont commencé dès 1944 à réfléchir à l’étape suivante, avant même la mise en service de l’ENIAC.

Naissance du modèle

Timbre à l'effigie de von Neumann (1903-1957)
émis par la Hongrie, son pays natal.

Source : Union postale universelle.

En 1944, John von Neumann est introduit dans le projet ENIAC par Herman Goldstine, qui assurait la liaison scientifique du projet avec le département de la Défense. Von Neumann était un esprit universel, dont les contributions allaient des mathématiques à la logique, la physique et l’économie. Il avait rencontré Turing et connaissait ses travaux. Il participait alors au projet Manhattan, et l’Histoire dit que Goldstine lui parla du projet ENIAC lors d’une rencontre fortuite sur un quai de gare. Quoi qu’il en soit, von Neumann accepta un poste de consultant dans ce projet et prit une part active aux travaux menés par Eckert et Mauchly sur la conception de l’EDVAC (Electronic Discrete Variable Automatic Computer), le successeur de l’ENIAC. En juin 1945, une première version, incomplète, d’un rapport sur la conception de l’EDVAC fut diffusée par Goldstine, sous la signature du seul von Neumann qui l’avait rédigé comme document de travail. Eckert et Mauchly en furent, à juste titre, profondément choqués ; par ailleurs, ils entrèrent en conflit avec l’Université de Pennsylvanie pour des questions de brevet et ces deux circonstances provoquèrent leur départ du projet en mars 1946 pour fonder leur entreprise, l’Eckert-Mauchly Computer Corporation. Von Neumann lui-même quitta le projet à la même époque pour Princeton, où il travailla avec Julian Bigelow sur le calculateur de l’IAS (Institut d’Études Avancées).

Une architecture novatrice

Le First Draft of a Report on EDVAC est un document de cent-une pages, qui décrit d’une part un schéma d’architecture de calculateur, organisé en trois éléments (unité arithmétique, unité de commande et mémoire contenant programme et données), d’autre part des principes de réalisation pour ces éléments, notamment les opérations arithmétiques. Si ce dernier aspect dépend partiellement de la technologie connue à l’époque, et a donc nécessairement vieilli, le modèle d’architecture, qui marque une transition profonde avec les pratiques antérieures, reste d’une étonnante actualité. Ce modèle, auquel reste attaché le nom de von Neumann, est représenté par le schéma ci-dessous.

Le modèle originel de von Neumann pour l’architecture des ordinateurs.

 

La première innovation est la séparation nette entre l’unité de commande, qui organise le flot de séquencement des instructions, et l’unité arithmétique, chargée de l’exécution proprement dite de ces instructions. La seconde innovation, la plus fondamentale, est l’idée du programme enregistré : les instructions, au lieu d’être codées sur un support externe (ruban, cartes, tableau de connexions), sont enregistrées dans la mémoire selon un codage conventionnel. Un compteur ordinal contient l’adresse de l’instruction en cours d’exécution ; il est automatiquement incrémenté après exécution de l’instruction, et explicitement modifié par les instructions de branchement.

Un emplacement de mémoire peut contenir indifféremment des instructions et des données, et une conséquence majeure (dont toute la portée n’avait probablement pas été perçue à l’époque) est qu’un programme peut être traité comme une donnée par d’autres programmes. Cette idée, présente en germe dans la machine de Turing, trouvait ici sa concrétisation.

Diffusion et mise en œuvre du modèle

Le rapport EDVAC circula largement et eut une influence notable sur bon nombre de travaux ultérieurs. En juillet et août 1946, le département de la Défense finança une école d’été pour diffuser les connaissances acquises dans les différents projets de calculateurs. Organisées par la Moore School de l’Université de Pennsylvanie, qui abritait le projet ENIAC, ces Moore School Lectures furent un instrument de réflexion sur les concepts et techniques de base des calculateurs et surtout de diffusion des travaux menés dans les projets ENIAC et EDVAC. Eckert et Mauchly, ainsi que Goldstine, furent les principaux intervenants, mais de nombreux autres conférenciers furent invités, dont Howard Aiken et George Stibitz, qui avaient construit des prototypes de calculateurs. Le seul conférencier non-Américain était Douglas Hartree, de l’Université de Manchester. Les auditeurs, au nombre d’une quarantaine, avaient tous été préalablement sélectionnés et invités.

Le projet EDVAC lui-même se trouva fortement perturbé par les départs d’Eckert et de Mauchly, que suivirent plusieurs de leurs ingénieurs, et ne fut achevé qu’en 1951. Son architecture était fondée sur le modèle présenté dans les Moore School Lectures, qui avait évolué par rapport au document originel. Entre temps, c’est en Europe que le modèle de von Neumann trouva ses premières réalisations.

Les machines de Manchester

En 1946, Frederic Williams, alors ingénieur au Telecommunications Research Establishment (TRE) en Angleterre (le siège de l’invention du radar), travaillait sur une mémoire utilisant l’écran d’un tube cathodique pour le stockage de bits. Il commença une collaboration avec Thomas Kilburn, de l’Université de Manchester, et obtint un poste dans cette université. L’avantage de la mémoire à tube sur la ligne à retard (technologie dominante à l’époque) était de permettre un accès aléatoire plutôt que séquentiel. En 1947, Williams et Kilburn décidèrent d’expérimenter leur mémoire connue sous le nom de « tube Williams » sur un mini-projet de calculateur qu’ils baptisèrent Baby. La taille de la mémoire était de 2048 bits. En juin 1948, le premier programme tourna sur le Baby ; il avait été inséré bit par bit sur l’écran cathodique.

Williams, Kilburn et leur équipe, que Turing rejoignit en 1948, mais sans y jouer de rôle majeur, construisirent ensuite le calculateur Manchester Mark-1. La mémoire à tube était complétée par une mémoire secondaire à tambour magnétique, ce qui était une innovation majeure. Mark-1 fonctionnait en mi-1949. La compagnie Ferranti était dès cette époque associée au projet, qui servit de base à son premier produit commercial.

L’EDSAC de Cambridge

Maurice Wilkes (1913-2010)
et la mémoire de l’EDSAC

Photo © Computer Laboratory, University of
Cambridge.

Maurice Wilkes, qui dirigeait le Mathematical Laboratory de l’Université de Cambridge et avait travaillé au TRE sur le radar, perçut très vite les possibilités ouvertes par le rapport EDVAC. Il assista aux Moore School Lectures en 1946 et lança dès son retour le projet d’un calculateur à programme enregistré appelé EDSAC (Electronic Delay Storage Automatic Calculator). Comme l’indique ce nom, la mémoire utilisait des lignes à retard. Le premier programme fonctionna en mai 1949. On considère généralement l’EDSAC comme le premier calculateur à programme enregistré. Bien qu’un programme enregistré ait fonctionné auparavant sur le Manchester Baby, ce dernier n’était pas un calculateur complet mais essentiellement un outil de validation du tube Williams. Quoi qu’il en soit, Manchester et Cambridge ont été des pionniers en la matière.

L’EDSAC comportait 1024 emplacements de mémoire de 18 bits et représentait les entiers en complément à 2 (le mode de codage le plus courant à l’heure actuelle). Il n’avait pas à proprement parler de système d’exploitation, mais des « ordres initiaux » câblés, qui remplissaient les fonctions d’un chargeur. Une invention déterminante, due à David Wheeler, fut celle des sous-programmes. La bibliothèque de sous-programmes (une centaine) était stockée sous forme de bandes de ruban perforé. Pour utiliser un sous-programme, on devait le copier physiquement sur le ruban contenant le programme utilisateur. La fonction d’éditeur de liens était donc réalisée à la main par des moyens mécaniques !

Le guide du programmeur de l’EDSAC (M. V. Wilkes, D. J. Wheeler, S. Gill, The preparation of programs for an electronic digital computer. Addison-Wesley, 1951), qui décrivait notamment l’utilisation des sous-programmes, fut le premier ouvrage consacré à la programmation. Wilkes inventa aussi en 1951 la micro-programmation, exploitée seulement dix ans plus tard, notamment dans la famille IBM/360.

Les autres projets

Au début de 1946, Turing lança au National Physical Laboratory (NPL) un projet de calculateur à programme enregistré, l’Automatic Computing Engine (ACE). Turing ne pouvait pas faire état de l’expérience du Colossus, protégé par le secret militaire. Cette circonstance, ajoutée à des problèmes d’organisation, retarda l’avancement des travaux, et Turing quitta le NPL en 1948 pour Manchester. Le projet n’aboutit qu’en 1950.

Le projet IAS fut lancé à Princeton par von Neumann en 1946. Son principal ingénieur était Bigelow. La machine commença à fonctionner à l’été 1951 et devint opérationnelle un an plus tard. Elle possédait 1024 emplacements de mémoire de 40 bits, réalisés par des tubes Williams.

Les premières machines commerciales

La compagnie Ferranti, qui fabriquait des équipements électriques et électroniques, collaborait depuis 1948 avec l’équipe de Manchester. Son premier produit, le Ferranti Mark-1 était directement inspiré du Manchester Mark-1. Sorti en février 1951, ce fut le premier calculateur diffusé commercialement.

La compagnie Eckert-Mauchly (EMCC) continua le travail commencé lors de la conception de l’EDVAC, en préparant un EDVAC-2, qui fut rebaptisé UNIVAC. En attendant l’aboutissement de ce projet de grande ampleur, EMCC construisit le calculateur BINAC pour la société Northrop en 1949. Confrontée à des difficultés financières, EMCC fut rachetée en 1950 par Remington Rand (fabricant d’armes et de machines à écrire) et devint la division UNIVAC de Remington Rand. Le premier UNIVAC-1 fut livré en juin 1951. La société UNIVAC resta longtemps une référence pour les ordinateurs de grande puissance.

Le premier ordinateur d’IBM, le 701 (qui utilisait les tubes Williams), fut annoncé mi-1952.

Qu’en est-il aujourd’hui ?

Plus de soixante ans après son invention, le modèle d’architecture de von Neumann régit toujours l’architecture des ordinateurs. Par rapport au schéma initial, on peut noter deux évolutions.

Le modèle de von Neumann, aujourd’hui.

 

  • Les entrées-sorties, initialement commandées par l’unité centrale, sont depuis le début des années 1960 sous le contrôle de processeurs autonomes (canaux d’entrée-sortie et mécanismes assimilés). Associée à la multiprogrammation (partage de la mémoire entre plusieurs programmes), cette organisation a notamment permis le développement des systèmes en temps partagé.
  • Les ordinateurs comportent maintenant des processeurs multiples, qu’il s’agisse d’unités séparées ou de « cœurs » multiples à l’intérieur d’une même puce. Cette organisation permet d’atteindre une puissance globale de calcul élevée sans augmenter la vitesse des processeurs individuels, limitée par les capacités d’évacuation de la chaleur dans des circuits de plus en plus denses.

Ces deux évolutions ont pour conséquence de mettre la mémoire, plutôt que l’unité centrale, au centre de l’ordinateur, et d’augmenter le degré de parallélisme dans le traitement et la circulation de l’information. Mais elles ne remettent pas en cause les principes de base que sont la séparation entre traitement et commande et la notion de programme enregistré.

L’accès des processeurs à la mémoire se fait à travers un bus (non représenté sur la figure), voie d’échange assurant un transfert rapide de l’information. Mais au cours du temps, et pour des raisons technologiques, le débit du bus a crû moins vite que le débit d’accès à la mémoire et surtout que la vitesse des processeurs. D’où un phénomène d’attente — le « goulot de von Neumann » — qui réduit les performances. Des palliatifs sont l’usage généralisé de caches à plusieurs niveaux (mémoire d’accès rapide, voisine du processeur, et retenant les données courantes), et le développement de machines à mémoire distribuée mais se posent alors des problèmes de cohérence pour les données en copies multiples.

Quel modèle de machine après von Neumann ? La question, posée depuis longtemps, n’a pas de réponse claire aujourd’hui (voir le document Calculer différemment).

Ce document inaugure une série consacrée à divers aspects de l’histoire de l’informatique, réalisée en conjonction avec un projet de musée virtuel sur ce thème, porté par l’association ACONIT.