| Type |
|---|
| Matériau | |
|---|---|
| Composé de |
| Usage |
|---|

Un processeur (ou unitĂ© centrale de calcul, UCC ; en anglais central processing unit, CPU) ou unitĂ© centrale de traitement est un composant Ă©lectronique prĂ©sent dans de nombreux dispositifs Ă©lectroniques qui exĂ©cute les instructions machine des programmes informatiques, câest le « cerveau » de lâordinateur. Avec la mĂ©moire, c'est notamment l'une des fonctions qui existent depuis les premiers ordinateurs. Un processeur construit en un seul circuit intĂ©grĂ© est un microprocesseur.
L'invention du transistor, en 1947, ouvrit la voie à la miniaturisation des composants électroniques. Car, auparavant, les ordinateurs prenaient la taille d'une piÚce entiÚre du fait de l'utilisation de tubes à vide volumineux[1],[2], gros consommateurs d'énergie et générant beaucoup de chaleur : chaque transistor était un tube cathodique.
Les processeurs des débuts étaient conçus spécifiquement pour un ordinateur d'un type donné. Cette méthode coûteuse de conception des processeurs pour une application spécifique a conduit au développement de la production de masse de processeurs qui conviennent pour un ou plusieurs usages. Cette tendance à la standardisation qui débuta dans le domaine des ordinateurs centraux (mainframes à transistors discrets et mini-ordinateurs) a connu une accélération rapide avec l'avÚnement des circuits intégrés. Les circuits intégrés ont permis la miniaturisation des processeurs. La miniaturisation et la standardisation des processeurs ont conduit à leur diffusion dans la vie moderne bien au-delà des usages des machines programmables dédiées.
Histoire
[modifier | modifier le code]Les premiers processeurs nécessitaient un espace important, puisqu'ils étaient construits à base de tubes électroniques ou de relais électromécaniques.
Leur crĂ©ation a pour origine les travaux de John von Neumann, qui rĂ©pondaient aux difficultĂ©s liĂ©es Ă la reprogrammation de calculateurs comme l'ENIAC oĂč il Ă©tait nĂ©cessaire de recĂąbler le systĂšme pour faire fonctionner un nouveau programme[3].
Dans cette architecture, une unité de contrÎle se charge de coordonner un processeur (ayant accÚs aux entrées/sorties) et la mémoire.
Tout cela a été décrit par un document intitulé « premiÚre ébauche d'un rapport sur l'EDVAC »[4].
Microprocesseurs
[modifier | modifier le code]

L'introduction du microprocesseur dans les annĂ©es 1970 a marquĂ© de maniĂšre significative la conception et l'implĂ©mentation des unitĂ©s centrales de traitement. Depuis l'introduction du premier microprocesseur (Intel 4004) en 1971 et du premier microprocesseur employĂ© couramment (Intel 8080) en 1974[5], cette classe de processeurs a presque totalement dĂ©passĂ© toutes les autres mĂ©thodes d'implĂ©mentation d'unitĂ© centrale de traitement. Les fabricants d'ordinateurs centraux (mainframe et miniordinateurs) de l'Ă©poque ont lancĂ© leurs propres programmes de dĂ©veloppement de circuits intĂ©grĂ©s pour mettre Ă niveau les architectures anciennes de leurs ordinateurs et ont par la suite produit des microprocesseurs Ă jeu d'instructions compatible en assurant la compatibilitĂ© ascendante avec leurs anciens modĂšles. Les gĂ©nĂ©rations prĂ©cĂ©dentes des unitĂ©s centrales de traitement comportaient un assemblage de composants discrets et de nombreux circuits faiblement intĂ©grĂ©s sur une ou plusieurs cartes Ă©lectroniques. Les microprocesseurs sont construits avec un trĂšs petit nombre de circuits trĂšs fortement intĂ©grĂ©s (ULSI)[6], habituellement un seul. Les microprocesseurs sont implĂ©mentĂ©s sur une seule puce Ă©lectronique, donc de dimensions rĂ©duites, ce qui veut dire des temps de commutation plus courts liĂ©s Ă des facteurs physiques comme la diminution de la capacitĂ© parasite des portes. Ceci a permis aux microprocesseurs synchrones d'augmenter leur frĂ©quence de base de quelques mĂ©gahertz[a] Ă plusieurs gigahertz[b]. De plus, Ă mesure que la capacitĂ© Ă fabriquer des transistors extrĂȘmement petits sur un circuit intĂ©grĂ© a augmentĂ©, la complexitĂ© et le nombre de transistors dans un seul processeur ont considĂ©rablement crĂ». Cette tendance largement observĂ©e est dĂ©crite par la loi de Moore[7], qui s'est avĂ©rĂ©e ĂȘtre jusqu'ici un facteur prĂ©dictif assez prĂ©cis de la croissance de la complexitĂ© des processeurs (et de tout autre circuit intĂ©grĂ©)[8].
Les processeurs multi cĆurs (multicores) rĂ©cents comportent maintenant plusieurs cĆurs dans un seul circuit intĂ©grĂ©. Leur efficacitĂ© dĂ©pend grandement de la topologie d'interconnexion entre les cĆurs. De nouvelles approches, comme la superposition de la mĂ©moire et du cĆur de processeur (memory stacking), sont Ă l'Ă©tude, et devraient conduire Ă un nouvel accroissement des performances[rĂ©f. nĂ©cessaire]. Celles des processeurs ont atteint 2 pĂ©taFLOPS en 2010 pour les serveurs[9]. Selon les projections, les PC devraient eux aussi atteindre le pĂ©taFLOPS Ă l'horizon 2030.[rĂ©f. nĂ©cessaire]
En , le supercalculateur militaire IBM Roadrunner est le premier à franchir cette barre symbolique du pétaFLOPS[9]. Puis, en novembre 2008, c'est au tour du supercalculateur Jaguar de Cray[9]. En , ce sont les deux seuls supercalculateurs à avoir dépassé le pétaFLOPS.
En , pour la sixiÚme fois consécutive, le supercalculateur chinois Tianhe-2 "milky way-2", développé par l'université nationale chinoise pour les technologies de défense, atteint la premiÚre place du classement semestriel mondial TOP500[10] des supercalculateurs avec 33,86 pétaFLOPS.
En et en lâabsence de chiffres officiels pour les Sunway Oceanlite et Tianhe-3 chinois, le Frontiera Ă©tĂ© dĂ©clarĂ© le premier supercalculateur Ă franchir la barre de lâExaFLOPS[11]. En matiĂšre de record de performance, la tendance est Ă un lĂ©ger au ralentissement de 2014 Ă 2024[11].
Tandis que la complexitĂ©, la taille, la construction, et la forme gĂ©nĂ©rale des processeurs ont fortement Ă©voluĂ© au cours des soixante derniĂšres annĂ©es, la conception et la fonction de base n'ont pas beaucoup changĂ©. Presque tous les processeurs communs d'aujourd'hui peuvent ĂȘtre dĂ©crits trĂšs prĂ©cisĂ©ment comme machines Ă programme enregistrĂ© de von Neumann. Alors que la loi de Moore, mentionnĂ©e ci-dessus, continue de se vĂ©rifier, des questions ont surgi au sujet des limites de la technologie des circuits intĂ©grĂ©s Ă transistors. La miniaturisation des portes Ă©lectroniques est si importante que les effets de phĂ©nomĂšnes comme l'Ă©lectromigration (dĂ©gradation progressive des interconnexions mĂ©talliques entraĂźnant une diminution de la fiabilitĂ© des circuits intĂ©grĂ©s) et les courants de fuite (leur importance augmente avec la rĂ©duction des dimensions des circuits intĂ©grĂ©s ; ils sont Ă l'origine d'une consommation d'Ă©nergie Ă©lectrique pĂ©nalisante), auparavant nĂ©gligeables, deviennent de plus en plus significatifs. Ces nouveaux problĂšmes sont parmi les nombreux facteurs conduisant les chercheurs Ă Ă©tudier, d'une part, de nouvelles technologies de traitement telles que l'ordinateur quantique ou l'usage du calcul parallĂšle et, d'autre part, d'autres mĂ©thodes d'utilisation du modĂšle classique de von Neumann.
Fonctionnement
[modifier | modifier le code]Définition d'un processeur
[modifier | modifier le code]Un processeur est un dispositif qui exécute une série de fonctions nécessaires à la réalisation d'un processus donné[12]. Cet élément repose sur la programmation et doit, au minimum, assurer les fonctions suivantes [13] :
Composition d'un processeur
[modifier | modifier le code]
Un processeur n'est pas qu'une unité de calcul. Cette derniÚre est incluse dans le processeur mais il fait aussi appel à une unité de contrÎle, une unité d'entrée-sortie, à une horloge et à des registres.
Le séquenceur, ou unité de contrÎle, se charge de gérer le processeur. Il peut décoder les instructions, choisir les registres à utiliser, gérer les interruptions ou initialiser les registres au démarrage. Il fait appel à l'unité d'entrée-sortie pour communiquer avec la mémoire ou les périphériques.
L'horloge doit fournir un signal régulier pour synchroniser tout le fonctionnement du processeur. Elle est présente dans les processeurs synchrones mais absente des processeurs asynchrones et des processeurs auto-synchrones.
Les registres sont des petites mĂ©moires internes trĂšs rapides, pouvant ĂȘtre accĂ©dĂ©es facilement. Un plus grand nombre de registres permettra au processeur d'ĂȘtre plus indĂ©pendant de la mĂ©moire. La taille des registres dĂ©pend de l'architecture, mais est gĂ©nĂ©ralement de quelques octets et correspond au nombre de bit de l'architecture (un processeur 8 bits aura des registres d'un octet). Il existe plusieurs registres, dont l'accumulateur et le compteur ordinal qui constituent la structure de base du processeur. Le premier sert Ă stocker les donnĂ©es traitĂ©es par l'UAL (l'unitĂ© de calcul arithmĂ©tique et logique), et le second donne l'adresse mĂ©moire de l'instruction en cours d'exĂ©cution ou de la suivante (en fonction de l'architecture). D'autres registres ont Ă©tĂ© ajoutĂ©s au fil du temps :
- le pointeur de pile : il sert à stocker l'adresse du sommet des piles, qui sont en fait des structures de données généralement utilisées pour gérer des appels de sous-programmes ;
- le registre d'instruction : il permet quant Ă lui de stocker l'instruction en cours de traitement ;
- le registre d'état : il est composé de plusieurs bits, appelés drapeaux (flags), servant à stocker des informations concernant le résultat de la derniÚre instruction exécutée ;
- les registres gĂ©nĂ©raux, qui servent Ă stocker les donnĂ©es allant ĂȘtre utilisĂ©es (ce qui permet d'Ă©conomiser des allers-retours avec la mĂ©moire).
Les processeurs actuels intÚgrent également des éléments plus complexes :
- plusieurs unitĂ©s arithmĂ©tiques et logiques, qui permettent de traiter plusieurs instructions en mĂȘme temps. L'architecture superscalaire, en particulier, permet de disposer des UAL en parallĂšle, chaque UAL pouvant exĂ©cuter une instruction indĂ©pendamment de l'autre ;
- unité de calcul en virgule flottante (en anglais floating-point unit, FPU), qui permet d'accélérer les calculs sur les nombres réels codés en virgule flottante ;
- unité de prédiction de branchement, qui permet au processeur d'anticiper un branchement dans le déroulement d'un programme afin d'éviter d'attendre la valeur définitive de l'adresse du saut. Il permet de mieux remplir le pipeline ;
- pipeline, qui permet de découper temporellement les traitements à effectuer ;
- mémoire cache, qui permet d'accélérer les traitements en diminuant les accÚs à la mémoire vive. Le cache d'instructions reçoit les prochaines instructions à exécuter, le cache de données manipule les données. Parfois un cache unifié est utilisé pour les instructions et les données. Plusieurs niveaux (levels) de caches peuvent coexister, on les désigne souvent sous les noms de L1, L2, L3 ou L4. Dans les processeurs évolués, des unités spéciales du processeur sont dévolues à la recherche, par des moyens statistiques et/ou prédictifs, des prochains accÚs à la mémoire vive.
Un processeur possĂšde aussi trois types de bus :
- bus de donnĂ©es, qui dĂ©finit la taille des donnĂ©es pour les entrĂ©esâsorties, dont les accĂšs Ă la mĂ©moire (indĂ©pendamment de la taille des registres internes) ;
- bus d'adresse, qui permet, lors d'une lecture ou d'une Ă©criture, d'envoyer l'adresse oĂč elle s'effectue, et donc dĂ©finit le nombre de cases mĂ©moire accessibles ;
- bus de contrÎle, qui permet la gestion du matériel, via les interruptions.
Classification des processeurs
[modifier | modifier le code]Un processeur est défini par :
- son architecture, c'est-à -dire son comportement vu par le programmeur, liée à :
- son jeu d'instructions (en anglais instruction set architecture, ISA),
- la largeur de ses registres internes de manipulation de données (8, 16, 32, 64, 128) bits et leur utilisation,
- les spĂ©cifications des entrĂ©esâsorties, de l'accĂšs Ă la mĂ©moire, etc. ;
- ses caractĂ©ristiques, variables mĂȘme entre processeurs compatibles :
- sa microarchitecture,
- la cadence de son horloge exprimée en mégahertz (MHz) ou gigahertz (GHz),
- sa finesse de gravure exprimée en nanomÚtres (nm),
- son nombre de cĆurs de calcul.
On classe les architectures en plusieurs grandes familles :
- CISC (complex instruction set computer), choix d'instructions aussi proches que possible d'un langage de haut niveau ;
- RISC (reduced instruction set computer), choix d'instructions plus simples et d'une structure permettant une exécution trÚs rapide ;
- VLIW (very long instruction word) ;
- DSP (digital signal processor), mĂȘme si cette derniĂšre famille est relativement spĂ©cifique. En effet, un processeur est un composant programmable et est donc a priori capable de rĂ©aliser tout type de programme. Toutefois, dans un souci d'optimisation, des processeurs spĂ©cialisĂ©s sont conçus et adaptĂ©s Ă certains types de calculs (3D, son, etc.). Les DSP sont des processeurs spĂ©cialisĂ©s pour les calculs liĂ©s au traitement de signaux[14]
. Par exemple, il n'est pas rare de voir implémenter des transformées de Fourier dans un DSP ;
- processeur softcore, est un circuit logique programmable et n'a plus du tout de fonction précablée contrairement à un DSP.
- NPU (Neural Processing Unit)
- TPU (Tensor Processing Unit)[15]
- LPU (Language Processing Unit)[16],[17],[18]
Les opérations du processeur
[modifier | modifier le code]Le rÎle fondamental de la plupart des processeurs, indépendamment de la forme physique qu'ils prennent, est d'exécuter une série d'instructions stockées appelée programme.
Les instructions (parfois décomposées en micro-instructions) et les données transmises au processeur sont exprimées en mots binaires (code machine). Elles sont généralement stockées dans la mémoire. Le séquenceur ordonne la lecture du contenu de la mémoire et la constitution des mots présentés à l'ALU qui les interprÚte.
Le langage le plus proche du code machine tout en restant lisible par des humains est le langage d'assemblage, aussi appelé langage assembleur (forme francisée du mot anglais « assembler »). Toutefois, l'informatique a développé toute une série de langages, dits de « bas niveau » (comme le Pascal, C, C++, Fortran, Ada, etc.), « haut niveau » (comme le python, java,C#,Ruby, etc.), destinés à simplifier l'écriture des programmes.
Les opérations décrites ici sont conformes à l'architecture de von Neumann. Le programme est représenté par une série d'instructions qui réalisent des opérations en liaison avec la mémoire vive de l'ordinateur. Il y a quatre étapes que presque toutes les architectures de von Neumann utilisent :
- Fetch, recherche de l'instruction ;
- Decode, interprétation de l'instruction (opération et opérandes) ;
- Execute, exécution de l'instruction ;
- Writeback, écriture du résultat.

La premiĂšre Ă©tape, fetch (recherche de l'instruction), recherche une instruction dans la mĂ©moire vive de l'ordinateur. L'emplacement dans la mĂ©moire est dĂ©terminĂ© par le compteur de programme (PC), qui stocke l'adresse de la prochaine instruction dans la mĂ©moire de programme. AprĂšs qu'une instruction ait Ă©tĂ© recherchĂ©e, le PC est incrĂ©mentĂ© par la longueur du mot d'instruction. Dans le cas de mot de longueur constante simple, c'est toujours le mĂȘme nombre. Par exemple, un mot de 32 bits de longueur constante qui emploie des mots de 8 bits de mĂ©moire incrĂ©menterait toujours le PC par 4 (exceptĂ© dans le cas des branchements). Les jeux d'instructions qui emploient des instructions de longueurs variables comme l'x86, incrĂ©mentent le PC par le nombre de mots de mĂ©moire correspondant Ă la derniĂšre longueur d'instruction. En outre, dans des processeurs plus complexes, l'incrĂ©mentation du PC ne se produit pas nĂ©cessairement Ă la fin de l'exĂ©cution d'une instruction. C'est particuliĂšrement le cas dans des architectures fortement parallĂ©lisĂ©es et superscalaires. Souvent, la recherche de l'instruction doit ĂȘtre opĂ©rĂ©e dans des mĂ©moires lentes, ralentissant le processeur qui attend l'instruction. Cette question est en grande partie rĂ©solue dans les processeurs modernes par l'utilisation de caches et de pipelines.
La seconde Ă©tape, decode (interprĂ©tation de l'instruction), dĂ©coupe l'instruction en plusieurs parties telles qu'elles puissent ĂȘtre utilisĂ©es par d'autres parties du processeur. La façon dont la valeur de l'instruction est interprĂ©tĂ©e est dĂ©finie par le jeu d'instructions du processeur[c]. Souvent, une partie d'une instruction, appelĂ©e opcode (code opĂ©ration), indique l'opĂ©ration Ă effectuer, par exemple une addition. Les parties restantes de l'instruction comportent habituellement les opĂ©randes de l'opĂ©ration. Ces opĂ©randes peuvent prendre une valeur constante, appelĂ©e valeur immĂ©diate, ou bien contenir l'emplacement oĂč retrouver (dans un registre ou une adresse mĂ©moire) la valeur de l'opĂ©rande, suivant le mode d'adressage utilisĂ©. Dans les conceptions anciennes, les parties du processeur responsables de l'interprĂ©tation Ă©taient fixes et non modifiables car elles Ă©taient codĂ©es dans les circuits. Dans les processeurs plus rĂ©cents, un microprogramme est souvent utilisĂ© pour l'interprĂ©tation. Ce microprogramme est parfois modifiable pour changer la façon dont le processeur interprĂšte les instructions, mĂȘme aprĂšs sa fabrication.

La troisiĂšme Ă©tape, execute (exĂ©cution de l'instruction), met en relation diffĂ©rentes parties du processeur pour rĂ©aliser l'opĂ©ration souhaitĂ©e. Par exemple, pour une addition, l'unitĂ© arithmĂ©tique et logique (ALU) sera connectĂ©e Ă des entrĂ©es et une sortie. Les entrĂ©es contiennent les nombres Ă additionner et la sortie contient le rĂ©sultat. L'ALU est dotĂ©e de circuits pour rĂ©aliser des opĂ©rations d'arithmĂ©tique et de logique simples sur les entrĂ©es (addition, opĂ©ration sur les bits). Si le rĂ©sultat d'une addition est trop grand pour ĂȘtre codĂ© par le processeur, un signal de dĂ©bordement est positionnĂ© dans un registre d'Ă©tat.
La derniÚre étape, writeback (écriture du résultat), écrit les résultats de l'étape d'exécution en mémoire. TrÚs souvent, les résultats sont écrits dans un registre interne au processeur pour bénéficier de temps d'accÚs trÚs courts pour les instructions suivantes. Parfois, les résultats sont écrits plus lentement dans la mémoire vive pour bénéficier de codages de nombres plus grands.
Certains types d'instructions manipulent le compteur de programme plutĂŽt que de produire directement des donnĂ©es de rĂ©sultat. Ces instructions sont appelĂ©es des branchements (branch) et permettent de rĂ©aliser des boucles (loops), des programmes Ă exĂ©cution conditionnelle ou des fonctions (sous-programmes) dans des programmes[d]. Beaucoup d'instructions servent aussi Ă changer l'Ă©tat de drapeaux (flags) dans un registre d'Ă©tat. Ces Ă©tats peuvent ĂȘtre utilisĂ©s pour conditionner le comportement d'un programme, puisqu'ils indiquent souvent la fin d'exĂ©cution de diffĂ©rentes opĂ©rations. Par exemple, une instruction de comparaison entre deux nombres va positionner un drapeau dans un registre d'Ă©tat suivant le rĂ©sultat de la comparaison. Ce drapeau peut alors ĂȘtre rĂ©utilisĂ© par une instruction de saut pour poursuivre le dĂ©roulement du programme.
AprĂšs l'exĂ©cution de l'instruction et l'Ă©criture des rĂ©sultats, tout le processus se rĂ©pĂšte, le prochain cycle d'instructions recherche l'instruction suivante puisque le compteur de programme avait Ă©tĂ© incrĂ©mentĂ©. Si l'instruction prĂ©cĂ©dente Ă©tait un saut, c'est l'adresse de destination du saut qui est enregistrĂ©e dans le compteur de programme. Dans des processeurs plus complexes, plusieurs instructions peuvent ĂȘtre recherchĂ©es, dĂ©codĂ©es et exĂ©cutĂ©es simultanĂ©ment, on parle alors d'architecture pipeline, aujourd'hui communĂ©ment utilisĂ©e dans les Ă©quipements Ă©lectroniques.
Vitesse de traitement
[modifier | modifier le code]La vitesse de traitement d'un processeur est encore parfois exprimée en IPS (instructions par seconde) ou en FLOPS (opérations à virgule flottante par seconde) pour l'unité de calcul en virgule flottante. Pourtant, aujourd'hui, les processeurs sont basés sur différentes architectures et techniques de parallélisation des traitements qui ne permettent plus de déterminer simplement leurs performances. Des programmes spécifiques d'évaluation des performances (Benchmarks) ont été mis au point pour obtenir des comparatifs des temps d'exécution de programmes réels.
Conception et implémentation
[modifier | modifier le code]Le codage des nombres
[modifier | modifier le code]La maniÚre dont un processeur représente les nombres est un choix de conception qui affecte de façon profonde son fonctionnement de base. Certains des ordinateurs les plus anciens utilisaient un modÚle électrique du systÚme numérique décimal (base 10). Certains autres ont fait le choix de systÚmes numériques plus exotiques comme les systÚmes trinaires (base 3). Les processeurs modernes représentent les nombres dans le systÚme binaire (base 2) dans lequel chacun des chiffres est représenté par une grandeur physique qui ne peut prendre que deux valeurs comme une tension électrique « haute/basse » ou en informatique « vrai/faux ».
Le concept physique de tension électrique est analogique par nature car elle peut prendre une infinité de valeurs. Pour les besoins de représentation physique des nombres binaires, les valeurs des tensions électriques sont définies comme des états « 1 » et « 0 ». Ces états résultent des paramÚtres opérationnels des éléments de commutation qui composent le processeur comme les niveaux de seuil des transistors.
En plus du systĂšme de reprĂ©sentation des nombres, il faut s'intĂ©resser Ă la taille et la prĂ©cision des nombres qu'un processeur peut manipuler nativement. Dans le cas d'un processeur binaire, un « bit » correspond Ă une position particuliĂšre dans les nombres que le processeur peut gĂ©rer. Le nombre de bits (chiffres) qu'un processeur utilise pour reprĂ©senter un nombre est souvent appelĂ© « taille du mot » (en anglais « word size », « bit width », « data path width ») ou « prĂ©cision entiĂšre » lorsqu'il s'agit de nombres entiers (Ă l'opposĂ© des nombres flottants). Ce nombre diffĂšre suivant les architectures, et souvent, suivant les diffĂ©rents modules d'un mĂȘme processeur. Par exemple, un processeur 8-bit gĂšre nativement des nombres qui peuvent ĂȘtre reprĂ©sentĂ©s par huit chiffres binaires (chaque chiffre pouvant prendre deux valeurs), soit 28 ou 256 valeurs discrĂštes.
La taille du mot machine affecte le nombre d'emplacements mĂ©moire que le processeur peut adresser (localiser). Par exemple, si un processeur binaire utilise 32 bits pour reprĂ©senter une adresse mĂ©moire et que chaque adresse mĂ©moire est reprĂ©sentĂ©e par un octet (8 bits), la taille mĂ©moire maximum qui peut ĂȘtre adressĂ©e par ce processeur est de 232 octets, soit 4 Go. C'est une vision trĂšs simpliste de l'espace d'adressage d'un processeur et beaucoup de conceptions utilisent des types d'adressages bien plus complexes, comme la pagination, pour adresser plus de mĂ©moire que la taille du nombre entier le leur permettrait avec un espace d'adressage Ă plat.
De plus grandes plages de nombres entiers nĂ©cessitent plus de structures Ă©lĂ©mentaires pour gĂ©rer les chiffres additionnels, conduisant Ă plus de complexitĂ©, des dimensions plus importantes, plus de consommation d'Ă©nergie et des coĂ»ts plus Ă©levĂ©s. Il n'est donc pas rare de rencontrer des processeurs 4-bit ou 8-bit dans des applications modernes, mĂȘme si des processeurs 16-bit, 32-bit, 64-bit et mĂȘme 128-bit sont disponibles. Pour bĂ©nĂ©ficier des avantages Ă la fois des tailles d'entier courtes et longues, beaucoup de processeurs sont conçus avec diffĂ©rentes largeurs d'entiers dans diffĂ©rentes parties du composant. Par exemple, le System/370 d'IBM est dotĂ© d'un processeur nativement 32-bit mais qui utilise une FPU de 128-bit de prĂ©cision pour atteindre une plus grande prĂ©cision dans les calculs avec les nombres flottants. Beaucoup des processeurs les plus rĂ©cents utilisent une combinaison comparable de taille de nombres, spĂ©cialement lorsque le processeur est destinĂ© Ă un usage gĂ©nĂ©raliste pour lequel il est nĂ©cessaire de trouver le juste Ă©quilibre entre les capacitĂ©s Ă traiter les nombres entiers et les nombres flottants.
Le signal d'horloge
[modifier | modifier le code]La plupart des processeurs, et plus largement la plupart des circuits de logique séquentielle, ont un fonctionnement synchrone par nature[e]. Cela veut dire qu'ils sont conçus et fonctionnent au rythme d'un signal de synchronisation. Ce signal est le « signal d'horloge ». Il prend souvent la forme d'une onde carrée périodique. En calculant le temps maximum que prend le signal électrique pour se propager dans les différentes branches des circuits du processeur, le concepteur peut sélectionner la période appropriée du signal d'horloge.
Cette pĂ©riode doit ĂȘtre supĂ©rieure au temps que prend le signal pour se propager dans le pire des cas. En fixant la pĂ©riode de l'horloge Ă une valeur bien au-dessus du pire des cas de temps de propagation, il est possible de concevoir entiĂšrement le processeur et la façon dont il dĂ©place les donnĂ©es autour des « fronts » montants ou descendants du signal d'horloge. Ceci a pour avantage de simplifier significativement le processeur tant du point de vue de sa conception que de celui du nombre de ses composants. Par contre, ceci a pour inconvĂ©nient le ralentissement du processeur puisque sa vitesse doit s'adapter Ă celle de son Ă©lĂ©ment le plus lent, mĂȘme si d'autres parties sont beaucoup plus rapides. Ces limitations sont largement compensĂ©es par diffĂ©rentes mĂ©thodes d'accroissement du parallĂ©lisme des processeurs (voir ci-dessous).
Les amĂ©liorations d'architecture ne peuvent pas, Ă elles seules, rĂ©soudre tous les inconvĂ©nients des processeurs globalement synchrones. Par exemple, un signal d'horloge est sujet Ă des retards comme tous les autres signaux Ă©lectriques. Les frĂ©quences d'horloge plus Ă©levĂ©es que l'on trouve dans les processeurs Ă la complexitĂ© croissante engendrent des difficultĂ©s pour conserver le signal d'horloge en phase (synchronisĂ©) Ă travers tout le processeur. En consĂ©quence, beaucoup de processeurs actuels nĂ©cessitent plusieurs signaux d'horloge identiques de façon Ă Ă©viter que le retard d'un seul signal ne puisse ĂȘtre la cause d'un dysfonctionnement du processeur. La forte quantitĂ© de chaleur qui doit ĂȘtre dissipĂ©e par le processeur constitue un autre problĂšme majeur dĂ» Ă l'accroissement des frĂ©quences d'horloge. Les changements d'Ă©tat frĂ©quents de l'horloge font commuter un grand nombre de composants, qu'ils soient ou non utilisĂ©s Ă cet instant. En gĂ©nĂ©ral, les composants qui commutent utilisent plus d'Ă©nergie que ceux qui restent dans un Ă©tat statique. Ainsi, plus les frĂ©quences d'horloge augmentent et plus la dissipation thermique en fait autant, ce qui fait que les processeurs requiĂšrent des solutions de refroidissement plus efficaces.
La méthode de clock gating permet de gérer la commutation involontaire de composants en inhibant le signal d'horloge sur les éléments choisis mais cette pratique est difficile à implémenter et reste réservée aux besoins de circuits à trÚs faible consommation.
Une autre méthode consiste à abandonner le signal global d'horloge ; la consommation d'énergie et la dissipation thermique sont réduites mais la conception du circuit devient plus complexe. On parle alors de processeurs asynchrones. Certaines conceptions ont été réalisés sans signal global d'horloge, utilisant par exemple les jeux d'instructions ARM ou MIPS, d'autres ne présentent que des parties asynchrones comme l'utilisation d'une UAL asynchrone avec un pipelining superscalaire pour atteindre des gains de performance dans les calculs arithmétiques. De tels processeurs sont actuellement plutÎt réservés aux applications embarquées (ordinateurs de poche, consoles de jeux, etc.).
Parallélisme
[modifier | modifier le code]
La description du mode de fonctionnement de base d'un processeur présentée au chapitre précédent présente la forme la plus simple que peut prendre un processeur. Ce type de processeur, appelé subscalaire, exécute une instruction sur un ou deux flux de données à la fois.
Ce processus est inefficace et inhérent aux processeurs subscalaires. Puisqu'une seule instruction est exécutée à la fois, tout le processeur attend la fin du traitement de cette instruction avant de s'intéresser à la suivante avec pour conséquence que le processeur reste figé sur les instructions qui nécessitent plus d'un cycle d'horloge pour s'exécuter. L'ajout d'une seconde unité d'exécution (voir ci-dessous) ne permet pas d'améliorer notablement les performances, ce n'est plus une unité d'exécution qui se trouve figée mais deux, en augmentant encore le nombre de transistors inutilisés. Ce type de conception, dans laquelle les ressources d'exécution du processeur ne traitent qu'une seule instruction à la fois ne peut atteindre que des performances scalaires (une instruction par cycle d'horloge), voire subscalaires (moins d'une instruction par cycle d'horloge).
En tentant d'obtenir des performances scalaires et au-delà , on a abouti à diverses méthodes qui conduisent le processeur a un comportement moins linéaire et plus parallÚle. Lorsqu'on parle de parallélisme de processeur, deux techniques de conception sont utilisées :
- parallélisme au niveau instruction (en anglais : instruction-level parallelism, ILP) ;
- parallélisme au niveau thread (en anglais : thread-level parallelism, TLP).
L'ILP vise Ă augmenter la vitesse Ă laquelle les instructions sont exĂ©cutĂ©es par un processeur (câest-Ă -dire augmenter l'utilisation des ressources d'exĂ©cution prĂ©sentes dans le circuit intĂ©grĂ©). Le TLP vise Ă augmenter le nombre de threads que le processeur pourra exĂ©cuter simultanĂ©ment. Chaque mĂ©thode diffĂšre de l'autre d'une part, par la façon avec laquelle elle est implĂ©mentĂ©e et d'autre part, du fait de leur efficacitĂ© relative Ă augmenter les performances des processeurs pour une application.
ILP : pipelining et architecture superscalaire
[modifier | modifier le code]
Une des mĂ©thodes les plus simples pour accroĂźtre le parallĂ©lisme consiste Ă dĂ©marrer les premiĂšres Ă©tapes de recherche (fetch) et d'interprĂ©tation (decode) d'une instruction avant la fin de l'exĂ©cution de l'instruction prĂ©cĂ©dente. C'est la forme la plus simple de la technique de pipelining. Elle est utilisĂ©e dans la plupart des processeurs modernes non spĂ©cialisĂ©s. Le pipelining permet d'exĂ©cuter plus d'une instruction Ă la fois en dĂ©composant le cycle d'instruction en diffĂ©rentes Ă©tapes. Ce dĂ©coupage peut ĂȘtre comparĂ© Ă une chaĂźne d'assemblage.
Le pipelining peut crĂ©er des conflits de dĂ©pendance de donnĂ©es, lorsque le rĂ©sultat de l'opĂ©ration prĂ©cĂ©dente est nĂ©cessaire Ă l'exĂ©cution de l'opĂ©ration suivante. Pour rĂ©soudre ce problĂšme, un soin particulier doit ĂȘtre apportĂ© pour vĂ©rifier ce type de situation et retarder, le cas Ă©chĂ©ant, une partie du pipeline d'instruction. Naturellement, les complĂ©ments de circuits Ă apporter pour cela ajoutent Ă la complexitĂ© des processeurs parallĂšles. Un processeur parallĂšle peut devenir presque scalaire, ralenti uniquement par les attentes du pipeline (une instruction prend moins d'un cycle d'horloge par Ă©tape).

Les développements suivants du pipelining ont conduit au développement d'une méthode qui diminue encore plus les temps d'attente des composants du processeur. Les architectures dites superscalaires comportent plusieurs unités d'exécution identiques[19]. Dans un processeur superscalaire, plusieurs instructions sont lues et transmises à un répartisseur qui décide si les instructions seront exécutées en parallÚle (simultanément) ou non. Le cas échéant, les instructions sont réparties sur les unités d'exécution disponibles. En général, plus un processeur superscalaire est capable d'exécuter d'instructions en parallÚle et plus le nombre d'instructions exécutées dans un cycle sera élevé.
La plupart des difficultĂ©s rencontrĂ©es dans la conception des architectures de processeurs superscalaires rĂ©sident dans la mise au point du rĂ©partiteur. Le rĂ©partiteur doit ĂȘtre disponible rapidement et ĂȘtre capable de dĂ©terminer sans erreur si les instructions peuvent ĂȘtre exĂ©cutĂ©es en parallĂšle, il doit alors les distribuer de façon Ă charger les unitĂ©s d'exĂ©cution autant qu'il est possible. Pour cela, le pipeline d'instructions doit ĂȘtre rempli aussi souvent que possible, crĂ©ant le besoin d'une quantitĂ© importante de mĂ©moire cache. Les techniques de traitement alĂ©atoire comme la prĂ©diction de branchement, l'exĂ©cution spĂ©culative et la rĂ©solution des dĂ©pendances aux donnĂ©es deviennent cruciales pour maintenir un haut niveau de performance. En tentant de prĂ©dire quel branchement (ou chemin) une instruction conditionnelle prendra, le processeur peut minimiser le temps que tout le pipeline doit attendre jusqu'Ă la fin d'exĂ©cution de l'instruction conditionnelle. L'exĂ©cution spĂ©culative amĂ©liore les performances modestes en exĂ©cutant des portions de code qui seront, ou ne seront pas, nĂ©cessaires Ă la suite d'une instruction conditionnelle. La rĂ©solution de la dĂ©pendance aux donnĂ©es est obtenue en rĂ©organisant l'ordre dans lequel les instructions sont exĂ©cutĂ©es en optimisant la disponibilitĂ© des donnĂ©es.
Lorsque seule une partie de processeur est superscalaire, la partie qui ne l'est pas rencontre des problÚmes de performance dus aux temps d'attente d'ordonnancement. Le Pentium original (P5) d'Intel disposait de deux ALU superscalaires qui pouvaient chacune accepter une instruction par cycle. Ensuite le P5 est devenu superscalaire pour les calculs sur les nombres entiers mais pas sur les nombres à virgule flottante. Les successeurs des architectures Pentium d'Intel, les P6, ont été dotés de capacités superscalaires pour les calculs sur les nombres à virgule flottante améliorant par là leurs performances en calcul flottant.
Les architectures à pipeline et superscalaires augmentent le parallélisme (ILP) des processeurs en permettant à un processeur unique d'exécuter des instructions à un rythme de plus d'une instruction par cycle. La plupart des processeurs d'aujourd'hui ont au moins une partie superscalaire. Au cours des derniÚres années, certaines évolutions dans la conception des processeurs à fort parallélisme ne se trouvent plus dans les circuits du processeur mais ont été placées dans le logiciel ou dans son interface avec le logiciel, le jeu d'instructions (instruction set architecture, ISA). La stratégie des instructions trÚs longues (very long instruction word, VLIW) implémente certains parallélismes directement dans le logiciel, ce qui réduit la participation du processeur au gain de performance mais augmente aussi sa simplicité.
TLP : multithreading simultanĂ© et architecture multicĆur
[modifier | modifier le code]Une autre stratĂ©gie communĂ©ment employĂ©e pour augmenter le parallĂ©lisme des processeurs consiste Ă introduire la capacitĂ© d'exĂ©cuter plusieurs threads simultanĂ©ment. De maniĂšre gĂ©nĂ©rale, les processeurs multithreads ont Ă©tĂ© utilisĂ©s depuis plus longtemps que les processeurs Ă pipeline. Bon nombre des conceptions pionniĂšres, rĂ©alisĂ©es par la sociĂ©tĂ© Cray Research, datant de la fin des annĂ©es 1970 et des annĂ©es 1980, mettaient en Ćuvre principalement le TLP, dĂ©gageant alors de trĂšs grandes capacitĂ©s de calcul (pour l'Ă©poque). En fait, le multithreading Ă©tait connu dĂšs les annĂ©es 1950 (Smotherman 2005).
Dans le cas des processeurs simples, les deux mĂ©thodologies principales employĂ©es pour dĂ©velopper le TLP sont le multiprocessing au niveau circuit (chip-level multiprocessing, CMP) et le multithreading simultanĂ© (simultaneous multithreading, SMT). Ă un plus haut niveau, il est d'usage de rĂ©aliser des ordinateurs avec plusieurs processeurs totalement indĂ©pendants dans des organisations de type symĂ©trique (symmetric multiprocessing, SMP), donc en particulier Ă accĂšs mĂ©moire uniforme (uniform memory access, UMA), ou asymĂ©trique (asymmetric multiprocessing) Ă accĂšs mĂ©moire non uniforme (non uniform memory access, NUMA). Il s'agit alors de multiprocesseurs ou de processeurs multi-cĆur. Alors que ces techniques diffĂšrent par les moyens qu'elles mettent en Ćuvre, elles visent toutes le mĂȘme but : augmenter le nombre de threads qu'un processeur peut exĂ©cuter en parallĂšle.
Les mĂ©thodes de parallĂ©lisme CMP et SMP sont assez semblables et demandent plus d'effort de conception que l'utilisation de deux ou trois processeurs totalement indĂ©pendants. Dans le cas du CMP, plusieurs cĆurs (cores) de processeurs sont intĂ©grĂ©s dans le mĂȘme boĂźtier, parfois mĂȘme dans le mĂȘme circuit intĂ©grĂ©. Les SMP, eux, utilisent plusieurs boĂźtiers indĂ©pendants. Le NUMA est comparable au CMP mais met en Ćuvre un modĂšle d'accĂšs mĂ©moire non uniforme (les temps d'accĂšs sont diffĂ©rents suivant que la mĂ©moire est locale ou non locale Ă un processeur donnĂ©). Cette caractĂ©ristique est fondamentale dans les ordinateurs Ă plusieurs processeurs car pour les modĂšles SMP, la mĂ©moire est partagĂ©e et les temps d'accĂšs Ă la mĂ©moire sont donc rapidement dĂ©gradĂ©s en cas d'accĂšs simultanĂ© par plusieurs processeurs. Ă ce titre, le NUMA est considĂ©rĂ© comme un modĂšle plus Ă©volutif en nombre de processeurs.
SMT diffĂšre des autres amĂ©liorations de TLP puisqu'il vise Ă dupliquer aussi peu de portions de processeur que possible. Sa mise en Ćuvre ressemble Ă une architecture superscalaire et se trouve souvent utilisĂ©e dans les microprocesseurs superscalaires (comme les POWER5 d'IBM). PlutĂŽt que de dupliquer un processeur complet, la conception SMT ne duplique que les parties nĂ©cessaires pour la recherche (fetch), l'interprĂ©tation (decode) et la rĂ©partition des instructions (dispatch) ainsi que les registres non spĂ©cialisĂ©s. Ceci permet Ă un processeur SMT de maintenir ses unitĂ©s d'exĂ©cution occupĂ©es plus souvent, en leur fournissant des instructions en provenance de deux threads diffĂ©rents. Comme on vient de la voir, le SMT est proche de l'architecture ILP superscalaire, mais cette derniĂšre exĂ©cute des instructions en provenance du mĂȘme thread.
Notes et références
[modifier | modifier le code]Notes
[modifier | modifier le code]- â 2,5 MHz pour le Zilog Z80 en 1976
4,77 MHz pour l'Intel 8088 sur le premier IBM-PC en 1981 - â 4 GHz pour l'Intel Core i7 6700K en 2015
- â Parce que l'architecture du jeu d'instructions d'une CPU est fondamentale pour son interface et utilisation, cela est souvent utilisĂ© comme une classification pour le « type » de CPU. Par exemple, une CPU PowerPC utilise une variation du PowerPC ISA. Un systĂšme peut exĂ©cuter un ISA diffĂ©rent en exĂ©cutant un Ă©mulateur.
- â Parmi les premiers ordinateurs tel que le Harvard Mark I aucun type de sauts n'Ă©tait supportĂ©, limitant par consĂ©quent la complexitĂ© des programmes pouvant ĂȘtre exĂ©cutĂ©s. C'est essentiellement pour cette raison que ces ordinateurs sont souvent considĂ©rĂ©s comme ne contenant pas une CPU propre, malgrĂ© leurs similitudes aux ordinateurs Ă programme enregistrĂ©.
- â Dans les faits, tous les CPU synchrones utilisent un mĂ©lange de logique sĂ©quentielle et de logique combinatoire (voir logique boolĂ©enne).
Références
[modifier | modifier le code]- â (en) Robert Garner et Frederick (Rick) Dill, « The Legendary IBM 1401 Data Processing System », IEEE Solid-State Circuits Magazine, vol. 2, no 1,â , p. 28â39 (DOI 10.1109/MSSC.2009.935295, S2CID 31608817, lire en ligne)
- â (en) « IBM100 - The IBM 700 Series », sur www-03.ibm.com, (consultĂ© le )
- â « Le modĂšle dâarchitecture de von Neumann », sur interstices.info (consultĂ© le )
- â (en) John Von Neuman, First Draft of a Report on the EDVAC, Moore School of Electrical Engineering University of Pennsylvania, , 47lire en ligne=https://www.researchgate.net/publication/312599265_Introduction_to_The_First_Draft_of_a_Report_on_the_EDVAC_Update_January_2017[PDF]
- â Captain Tech, « Lâhistoire fascinante des microprocesseurs : du premier circuit intĂ©grĂ© aux puces modernes », (consultĂ© en )
- â (en) GeeksforGeeks, « What is Ultra Large-Scale Integration? », (consultĂ© le )
- â (en) Gordon E. Moor, « Cramming more components onto integrated circuits », Electronics, vol. 38, no 8,â (lire en ligne)
- â « Moore's Law », sur www.umsl.edu (consultĂ© le )
- Gordon E. Moor, « Les supercalculateurs, un impĂ©ratif scientifique et industriel », La note de veille, vol. 188, no 8,â (lire en ligne)
- â Top 500,novembre 2015, top500.org de novembre 2015, consultĂ© le 29 dĂ©cembre 2019
- Yannick Guerrini, « 29 ans de supercalculateurs, une puissance multipliée par 18 millions ! », (consulté le )
- â Demirdjian 1994, p. 146.
- â adagio777, « Quels sont les composants d'un PC ? », sur BuildMyPc, (consultĂ© le )
- â (en) Stephen A. Dyer et Brian K. Harms, Advances in Computers, vol. 37, Academic Press, , 59 et 118 p. (ISBN 978-0120121373, ISSN 0065-2458, OCLC 858439915, LCCN 59015761, DOI 10.1016/S0065-2458(08)60403-9), « Digital Signal Processing »
- â « Cloud Tensor Processing Units (TPUs) », sur Google Cloud (consultĂ© le )
- â (en) Wayne Williams, « 'Feels like magic!': Groq's ultrafast LPU could well be the first LLM-native processor â and its latest demo may well convince Nvidia and AMD to get out their checkbooks », sur TechRadar Pro, TechRadar, (consultĂ© le )
- â (en) Chris Mellor, « Grokking Groq's Groqness », sur Blocks & Files, (consultĂ© le )
- â (en) Dennis Abts, Jonathan Ross, Jonathan Sparling, Mark Wong-VanHaren, Max Baker, Tom Hawkins, Andrew Bell, John Thompson, Temesghen Kahsai, Garrin Kimmell, Jennifer Hwang, Rebekah Leslie-Hurd, Michael Bye, E.R. Creswick, Matthew Boyd, Mahitha Venigalla, Evan Laforge, Jon Purdy, Purushotham Kamath, Dinesh Maheshwari, Michael Beidler, Geert Rosseel, Omar Ahmad, Gleb Gagarin, Richard Czekalski, Ashay Rane, Sahil Parmar, Jeff Werner, Jim Sproch, Adrian Macias et Brian Kurtz, 2020 ACM/IEEE 47th Annual International Symposium on Computer Architecture (ISCA), , 145â158 p. (ISBN 978-1-7281-4661-4, DOI 10.1109/ISCA45697.2020.00023), « Think Fast: A Tensor Streaming Processor (TSP) for Accelerating Deep Learning Workloads »
- â (en) Jack Huynh, « The AMD Athlon XP Processor with 512KB L2 Cache », University of Illinois - Urbana-Champaign, (consultĂ© en ), p. 6-11 [PDF]
Annexes
[modifier | modifier le code]Bibliographie
[modifier | modifier le code]Ouvrages
[modifier | modifier le code]- Patrick Demirdjian, De la diode au microprocesseur, Editions Technip, , 302 p. (ISBN 9782710806615, lire en ligne).

Articles connexes
[modifier | modifier le code]Liens externes
[modifier | modifier le code]
- Ressource relative à la santé :
- Notices dans des dictionnaires ou encyclopédies généralistes :
