Question:
Qu'est-ce qui empêche la construction d'un CPU avec toute la mémoire nécessaire représentée dans des registres?
user173317
2019-03-04 10:25:24 UTC
view on stackexchange narkive permalink

Les processeurs modernes utilisent une hiérarchie de technologies de mémoire. Les registres, intégrés à la puce, ont les temps d'accès les plus courts, mais sont chers et volatils. Le cache est un intermédiaire entre la RAM et les registres pour stocker les structures de données afin de réduire la latence entre la RAM et les registres. La RAM contient, pour la portée de cette requête, le code de programme actif et leurs structures de données. Le stockage non volatile est utilisé par les programmes pour enregistrer leurs données et contenir le système d'exploitation et ses programmes.

La latence d'accès aux données en mémoire a été un goulot d'étranglement majeur pour créer des processeurs plus rapides qui ne restent pas inactifs, dans l'attente d'instructions supplémentaires. En tant que tel, diverses méthodes ont été conçues pour paralléliser les charges de travail, les processeurs pour prédire le branchement pour masquer la surcharge d'accès à la mémoire, etc. Cependant, la complexité de ceci a apparemment ignoré une autre possibilité: un fichier de registre de mémoire entière.

Un tel processeur est construit avec 4, 8, 16, 32 Go ou plus, constitués de registres. Pas de cache. Pas de RAM. Juste le CPU, les registres sur la puce et le stockage externe non volatile (SSD / Flash, HDD, etc.).

Je comprends que la demande pour une telle puce ne sera probablement pas suffisante pour justifier le coût, mais je reste surpris que personne ne semble avoir conçu un appareil simple, tel qu'un MCU ou un SoC hautes performances avec une petite quantité de mémoire de registre uniquement. Y a-t-il d'autres défis (peut-être techniques) à la conception et à la construction d'une telle puce?

MODIFIER pour clarifier. Je ne fais pas référence à un processeur dans lequel toute la mémoire (technologie DRAM) est intégrée à la puce du processeur, ni à un cache étendu à plusieurs gigaoctets. Je pose des questions sur une conception dans laquelle les registres restent leur technologie existante ... juste étendus de quelques ordres de grandeur pour pouvoir contenir plusieurs gigaoctets de données.

À quelle application pouvez-vous penser qui nécessite une vitesse aussi fulgurante mais très peu de mémoire?Je pense qu'il y a aussi beaucoup plus de circuits auxiliaires pour par registre que pour SRAM.La chose la plus proche est probablement un FPGA.
La conception du processeur SPARC permet quelque chose comme 520 registres.Ils divisent cela en une variété de «fenêtres» qui sont de plus petites sections de ceci.(Je ne connais aucun SPARC qui implémente tous les 520, d'ailleurs.) La mise en œuvre de registres à double port en lecture / écriture coûte cher.Et ceux-ci doivent fonctionner à pleine vitesse d'horloge.Des configurations de mémoire plus importantes nécessitent plus de temps et dépassent rapidement la fréquence d'horloge, ce qui nécessite des retards.À un moment donné, vous êtes de retour au système de cache.Vous pouvez organiser un cache L1 plus rapide (plus petit) avec des délais de cycle d'horloge plus faibles avec des L2 et L3 supplémentaires avec des délais plus longs.
Avez-vous essayé d'estimer la quantité de matériel logique et d'espace de silicium nécessaires pour adresser (et accéder) individuellement à 32 Go de registres?Et quelle serait la latence d'accès associée?
Toute mémoire prend de la place.Les registres sont la mémoire.Plus vous utilisez de place pour les registres, plus ils s'éloignent du reste du noyau.Cela ralentira la conversation avec eux.
À peu près le coût est la seule raison.Pour ce faire, vous avez besoin d'un processeur de la taille d'une assiette, coûte quelques millions de dollars pièce, prend un refroidissement à l'azote liquide, utilise quelques kilowatts et fonctionne également très lentement.Pourquoi?Parce que chaque instruction a maintenant trois champs pour l'adressage de registre, chaque 64 bits, plus les opcodes, vous avez un mot d'instruction de plus de 200 bits.
Mais, je sais que l'AVR a fait cela: il contient 512 mots de mémoire en tant que SRAM, et en plus d'adressage direct de la mémoire, ces SRAM sont en fait des registres.C'est donc possible et cela a été fait.
Quels registres aviez-vous à l'esprit qui sont plus rapides que 1600Mhz 1 en attente de lecture sur SDRAM 8 Go?Quel système d'exploitation, le cas échéant, soutiendrait votre concept?Le coût de la RAM statique du processeur n'est pas envisageable pour justifier la production incrémentielle de SDRAM haute vitesse à faible coût.Certains processeurs ont maintenant un cache L1, L2 et L3
@user3528438 Non. Voici comment définir un registre: "un emplacement de stockage, directement accessible par la CPU, qui peut être utilisé comme opérandes pour les instructions".Et "instructions" signifie plus que simplement charger / stocker: plus comme faire des opérations arithmétiques, par exemple.Sur les 512 octets de RAM d'un AVR, vous ne pouvez pas effectuer directement d'opérations arithmétiques: ces octets ne sont pas directement liés au CPU.Vous devez charger les données de la RAM dans les registres réels, puis exécuter l'instruction arithmétique sur les regs.La RAM interne des microcontrôleurs n'est pas un ensemble de registres, même si elle se trouve dans la même puce.Il passe toujours par un bus.
Les puces PIC16 appellent également tous leurs «registres» de mémoire disponibles, ce qui vous donne quelques kilo-octets.Ils ne prennent pas en charge directement la mémoire externe.
@dim: Que faire si vous avez une instruction qui combine essentiellement une charge + une autre opération + un magasin?Je pense qu'aucune distinction nette n'est possible.Traditionnellement, les ISA utilisent des registres CPU, mais en gros, ils sont juste un cache L0 contrôlé directement.
@Michael Cela ne change vraiment rien s'il y a une instruction qui permet de combiner extraire une valeur de la mémoire + effectuer une opération arithmétique dessus.Le x86 a de telles instructions disponibles, mais serait-il toujours logique de considérer votre SDRAM DDR de 16 Go comme un ensemble de registres géant?Le fait est que même si le CPU les combine, il doit faire une récupération qui passe par un bus mémoire, géré par une interface mémoire côté CPU, puis finalement passer par un arbitrage, puis un décodage d'adresse côté RAM, etc.... toutes sortes de choses qui ne sont pas nécessaires pour accéder à un registre.
J'ai utilisé une puce PIC très bas de gamme avec 32 registres 8 bits et aucune mémoire supplémentaire.Elle était favorable à l’adressage indirect de ces registres.
Huit réponses:
Wouter van Ooijen
2019-03-04 13:03:22 UTC
view on stackexchange narkive permalink

Deux facteurs vont à l'encontre de votre idée:

  • les processus de production de puces optimaux pour la (D) RAM et la logique (CPU) sont différents.Combiner les deux sur la même puce conduit à des compromis, et le résultat est bien moins optimal que ce qui peut être obtenu avec des puces séparées, chacune construite avec son propre processus optimal.

  • la mémoire rapide (registres) prend plus de surface de découpe et consomme plus de courant (énergie) que la mémoire lente.Par conséquent, lorsque la puce du processeur est remplie d'une mémoire très rapide (vitesse du processeur), la taille de cette mémoire serait loin de correspondre aux Go que vous mentionnez.Cela ressemblerait plus à la taille actuelle des caches sur puce les plus rapides.

Une de mes questions précédentes sur les différences de processus exactes: https://electronics.stackexchange.com/questions/134585/precise-differences-between-dram-and-cmos-processes
Pouvez-vous fournir un chiffre approximatif de la différence de taille?Est-ce un facteur de 2, 20, 200?
La cellule DRAM @PeteBecker utilise 1 transistor + capacité, une cellule SRAM (qui ressemble plus à un registre) utilise environ 6 transistors.Vous pouvez estimer la différence de taille à partir de cela.
C'est une autre différence, mais c'est en plus (en plus de) ce que j'ai soutenu.Une cellule DRAM mise en œuvre dans un processus optimisé pour le processeur sera inférieure à un fabricant dans un processus optimisé pour la DRAM.
Un ajout: si vous ajoutez un grand nombre de registres à un CPU, et que la surface de découpe prise par les registres augmente, les registres vont ralentir.Ainsi, même dans une conception de processus / registre unique, même sans tenir compte du coût, il y a un compromis entre taille et vitesse.
user2922073
2019-03-04 18:02:30 UTC
view on stackexchange narkive permalink

Il n'y a pas assez de place sur la puce du processeur pour contenir une telle quantité de mémoire, la mémoire RAM actuelle repose sur des modules DIMM avec plusieurs puces.

Le coût est également un problème, l'espace de la puce CPU est plus cher en raison d'un processus de fabrication différent.

Nous avons actuellement des caches CPU (mémoire sur la puce) à cet effet et ils sont aussi grands que possible.Dans la plupart des cas, il n'est pas nécessaire de rendre ce cache directement adressable.

Voici le dé d'un i7-5960X avec un cache L3 de 20 Mo:

img

source: https://www.anandtech.com/show/8426/the-intel-haswell-e-cpu-review-core-i7-5960x-i7-5930k-i7-5820k-tested

Image très intéressante!Quelle est la zone sur la droite?Je ne peux pas croire que ce soit un espace inutilisé.
@Gp2mv3 - la zone de droite est une planche à pain.Vous pouvez personnaliser votre puce.
Veuillez fournir un lien, ou au moins une citation, pour la source originale de l'image que vous incluez dans votre réponse.
@Gp2mv3 Réservé au matériel NSA?
user4574
2019-03-04 22:48:19 UTC
view on stackexchange narkive permalink

Je pense que la principale raison pour laquelle cela n'a pas été fait est que les performances pourraient ne pas être améliorées autant qu'on pourrait le penser.

1) Un processeur avec un ensemble de registres énorme devrait probablement fonctionner à une fréquence d'horloge inférieure à un avec un ensemble de registres plus petit.

a) Les mémoires sont essentiellement de très gros multiplexeurs. Plus le multiplex est grand, plus il faut de transistors pour effectuer un accès. Plus vous avez besoin de transistors, plus son fonctionnement est lent, soit parce qu'il y a plus de niveaux de logique, soit parce qu'il y a plus de transistors connectés au même nœud (donc une capacité plus élevée). Il y a une raison pour laquelle les mémoires ne fonctionnent pas à la même vitesse que la logique du processeur.

b) Mettre en œuvre autant de mémoire prend beaucoup d'espace sur le silicium. Il faut du temps pour que les signaux se propagent physiquement à travers un plus gros morceau de silicium (délai de routage). Simplement parce qu'il est plus grand, il est peu probable que l'appareil puisse fonctionner à la même vitesse qu'un processeur physiquement plus petit.

2) Les encodages binaires des instructions de la machine seraient beaucoup moins efficaces si vous ajoutez plus de registres. Par exemple, si votre CPU a 4 registres, vous avez besoin de 2 bits pour coder une sélection de registre. Si votre CPU a 4 milliards de registres 64 bits (soit 32 Go), vous avez besoin de 32 bits pour sélectionner chaque registre.

Prenons par exemple une instruction qui calcule le OU logique de deux registres et stocke le résultat dans un troisième registre.

Pour un CPU ayant 4 registres, vous devez réserver 6 bits pour encoder les sélections d'opérande et de destination.

Pour un processeur ayant 4 milliards de registres, vous ne devez pas utiliser 96 bits d'espace d'opérande pour coder les sélections de registres.

Les instructions qui prenaient 16 bits peuvent désormais prendre 128 bits. La taille des programmes deviendrait beaucoup plus grande en termes d'utilisation de la mémoire sans nécessairement ajouter à leurs fonctionnalités.

On pourrait bien sûr être intelligent et créer des encodages d'instructions qui n'utilisent que les premiers emplacements de registres X pour enregistrer des bits.Mais ensuite, nous revenons au concept de registre original.



Il existe des périphériques qui ont un accès à la mémoire en un seul cycle, mais ce sont des micro-contrôleurs ou un système sur une puce et ont généralement des fréquences d'horloge beaucoup plus faibles que le processeur d'un PC.Ils sont généralement limités à quelques 10 à 100 MHz pour un accès mémoire à cycle unique.Et même dans ces cas, les tailles de mémoire ne sont généralement pas de Go.

gnasher729
2019-03-04 19:13:00 UTC
view on stackexchange narkive permalink

Au fur et à mesure que vous ajoutez plus de registres à un processeur, le temps d'accès devient de plus en plus lent, car vous avez besoin de logique pour choisir, par exemple, l'un des 1024 registres au lieu de l'un des 16.

Et les registres sont rapides car ils sont connectés directement à diverses choses d'entrée et de sortie des ALU principalement).Vous pouvez le faire avec 16 registres, pas avec 1024.

Le cache L1 est à peu près aussi rapide que les registres, mais perd de la vitesse à cause des problèmes de sélection des bonnes données et de transfert des données.Le cache L1 devient également plus lent avec la taille.Et puis il y a le coût, bien sûr.Regardez les prix des processeurs avec 20 Mo de cache L3;cela vous permet de deviner la quantité de 64 Go de cache L3.

Vous avez besoin de champs d'adresse de registre plus longs dans le format d'instruction pour adresser plus de registres.Une instruction de 16 bits adressant deux registres différents sur 256 registres serait impossible, il ne reste plus de bits pour l'instruction.
@Uwe Sauf s'il s'agit d'un [TTA] (https://en.wikipedia.org/wiki/Transport_triggered_architecture)!: P
Neil_UK
2019-03-04 12:18:54 UTC
view on stackexchange narkive permalink

Coût.La mémoire rapide est moins dense que la mémoire lente, nécessitant plus de surface de découpe pour une quantité de stockage donnée.Et la zone de découpe coûte cher.

Pas vraiment.Du moins pas de coût monétaire.Le premier problème est qu'il n'est tout simplement pas clair comment vous obtiendriez autant de stockage si étroitement couplé à un seul cœur qu'il pourrait correspondre aux performances d'un fichier de registre, quel que soit l'argent dont vous disposez.
allez les gars, c'était une réponse provocante destinée à inciter certains d'entre vous à vanter les vertus de la hiérarchie, ce que je n'ai pas le temps de faire maintenant en raison d'autres engagements, même mentionner SPARC avec ses 192+ registres chevauchés dans des banques de8/24
Bien que j'aime lire des réponses provocantes et que j'en ai écrit au moins une ou deux moi-même, elles ne sont honnêtement pas si utiles ...
Chris Jefferson
2019-03-04 17:46:03 UTC
view on stackexchange narkive permalink

D'une certaine manière, cela dépend de ce que vous entendez par «registres».Il existe des compromis naturels entre:

  • Coût - l'accès rapide coûte plus cher
  • Chaleur - un accès rapide produit plus de chaleur
  • Taille - les blocs de données plus volumineux sont plus lents à accéder - donc même en ignorant le coût, vous ne pouvez pas agrandir les registres et vous attendre à ce qu'ils conservent la même vitesse, car vous devez aller et "obtenir les données" d'où que vous soyezil est stocké sur la puce.

L'un des premiers processeurs, l'Intel 4004, pouvait (et était souvent) utilisé sans RAM, et n'avait pas de cache, donc le processeur que vous voulez existe (bien qu'il utilisait toujours une ROM pour stocker le programme).

/ p>

Roland
2019-03-04 22:31:38 UTC
view on stackexchange narkive permalink

Optimisation.

Bien sûr, ce serait vraiment bien d'avoir une quantité infinie de registres rapides pour le stockage. Mais la raison pour laquelle les registres sont si rapides est la proximité des autres parties du processeur, donc limiter la quantité de registres les rend plus rapides. Le choix est entre quelques registres très rapides ou plusieurs registres plus lents.

De plus, les registres sont construits avec des transistors coûteux sur la puce principale. La RAM est également très rapide mais moins chère, mais pas si bon marché que vous pouvez implémenter tous vos besoins de stockage en RAM.

Même les registres ne sont pas tous les mêmes. Il est avantageux d'avoir quelques registres très rapides, fermés au cœur et pouvant être adressés avec seulement quelques bits, et d'avoir les autres registres un peu plus lents.

C'est la règle de Pareto (XVIIe siècle) selon laquelle 80% du travail peut être effectué dans seulement 20% des registres, vous feriez donc mieux de vous assurer que ce sont les registres les plus rapides que vous avez.

Entre les registres et la RAM, il existe plusieurs catégories de stockage en termes de vitesse et de coût et en dimensionnant soigneusement les caches L1, L2 et L3, vous pouvez améliorer le rapport performances / coût de votre supercalculateur.

Nous utilisons HD ou SSD pour le stockage d'octets Giga / Tera, mais ici aussi, nous avons besoin de plus de stockage que nous ne pouvons en payer, donc certaines archives très volumineuses qui ne sont pas nécessaires aussi rapidement doivent être déchargées sur bande.

Résumé: répartir votre argent sur cette hiérarchie d'options de stockage vous en donne le meilleur pour votre argent:

registres, caches L1 / 2/3, RAM, SSD, HD, bande

Vilx-
2019-03-05 04:40:46 UTC
view on stackexchange narkive permalink

Il n'est pas nécessaire de créer "toute la mémoire sous forme de registres". Les registres sont un concept de programmation profondément ancrés dans le cœur de traitement. Un processeur avec un million de registres serait ridiculement compliqué et pas très efficace. Vous voyez, quels registres un programme utilise est en fait "codé en dur" dans le programme. C'est le compilateur qui décide de ce qui va dans quel registre quand il compile le programme. Avec la mémoire, vous pouvez simplement allouer dynamiquement autant que vous en avez besoin. Vous avez un fichier de 10 Mo? Réservez autant de RAM pour le lire. Vous ne pouvez pas faire cela avec les registres. Vous devez savoir à l'avance lesquels vous allez utiliser. Les registres ne sont pas destinés à être utilisés comme ça.

Non, ce que vous voulez vraiment , c'est de la RAM - juste une RAM rapide. RAM qui est construite avec la même technologie que celle utilisée dans les registres et les caches CPU. Et cela ... existe réellement.

Il y a ce bel article ancien qui a été écrit il y a 12 ans, mais toujours d'actualité, je pense. Je vous conseille vivement de le lire, il explique joliment le fonctionnement de la mémoire de l'ordinateur. Bien que cela entre dans les détails, cela devient un peu sec.

Quoi qu'il en soit, l'auteur y décrit deux façons principales de créer de la mémoire - DRAM et SRAM.

La DRAM est basée sur des condensateurs - "1" est représenté par un condensateur chargé et "0" par un condensateur déchargé. C'est simple et bon marché à faire et c'est sur quoi la RAM est basée aujourd'hui. C'est aussi la source de tous ses inconvénients et de sa lenteur - la charge / décharge prend du temps.

La SRAM est basée sur plusieurs transistors et dans quel état ils se trouvent. C'est beaucoup plus rapide mais aussi beaucoup plus compliqué à faire (les fils doivent se croiser pour chaque bit) - donc plus cher. C'est aussi beaucoup plus gourmand en énergie. C'est ce qui est utilisé pour les caches CPU (et je soupçonne les registres).

Le fait est qu'il y a des périphériques où la RAM est basée sur la SRAM plutôt que sur la DRAM.Mais le prix est juste à travers le toit.Donc, plus communément, ce type de RAM se trouve en petites quantités dans des périphériques spécialisés (comme les commutateurs réseau) et sous forme de caches CPU.

Btw - il y a aussi une raison pour laquelle les caches CPU sont si petits (juste quelques Mo).Plus le cache est volumineux, plus il faut de temps pour trouver les octets nécessaires.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...