Frage:
Was verhindert den Aufbau einer CPU mit dem gesamten erforderlichen Speicher in Registern?
user173317
2019-03-04 10:25:24 UTC
view on stackexchange narkive permalink

Moderne CPUs verwenden eine Hierarchie von Speichertechnologien. In den Chip eingebaute Register haben die niedrigsten Zugriffszeiten, sind jedoch teuer und flüchtig. Der Cache ist ein Vermittler zwischen RAM und Registern zum Speichern von Datenstrukturen, um die Latenz zwischen RAM und Registern zu verringern. RAM enthält für den Umfang dieser Abfrage aktiven Programmcode und deren Datenstrukturen. Nichtflüchtiger Speicher wird von Programmen verwendet, um ihre Daten zu speichern und das Betriebssystem und seine Programme zu speichern.

Die Latenz beim Zugriff auf Daten im Speicher war ein großer Engpass bei der Erstellung schnellerer CPUs, die nicht im Leerlauf stehen und auf weitere Anweisungen warten. Daher wurden verschiedene Methoden entwickelt, um Workloads zu parallelisieren, CPUs, um Verzweigungen vorherzusagen, um den Speicherzugriffsaufwand zu verbergen, und vieles mehr. Die Komplexität dieser Methode hat jedoch anscheinend eine andere Möglichkeit ignoriert: eine Registerdatei für den gesamten Speicher.

Eine solche CPU besteht aus 4, 8, 16, 32 GB oder mehr Registern. Kein Cache. Kein RAM. Nur die CPU, die Register auf dem Chip und der externe nichtflüchtige Speicher (SSD / Flash, HDD usw.).

Ich verstehe, dass die Nachfrage nach einem solchen Chip wahrscheinlich nicht ausreicht, um die Kosten zu rechtfertigen, aber ich bin weiterhin überrascht, dass niemand ein einfaches Gerät wie eine Hochleistungs-MCU oder einen SoC mit einer geringen Menge entwickelt zu haben scheint des Nur-Register-Speichers. Gibt es andere (vielleicht technische) Herausforderungen bei der Konstruktion und dem Bau eines solchen Chips?

BEARBEITEN zur Verdeutlichung. Ich beziehe mich weder auf eine CPU, in der der gesamte Speicher (DRAM-Technologie) in den CPU-Chip integriert ist, noch auf einen Cache, der auf mehrere Gigabyte erweitert ist. Ich frage nach einem Design, bei dem die Register ihre vorhandene Technologie bleiben ... nur um einige Größenordnungen erweitert, um mehrere Gigabyte Daten aufnehmen zu können.

Welche Anwendung, die Sie sich vorstellen können, erfordert solch eine rasante Geschwindigkeit, aber sehr wenig Speicher?Ich denke, es gibt auch viel mehr Hilfsschaltungen pro Register als für SRAM.Das nächste ist wahrscheinlich ein FPGA.
Das SPARC-Prozessordesign ermöglicht etwa 520 Register.Sie teilen dies in eine Vielzahl von "Fenstern" auf, die kleinere Abschnitte davon sind.(Ich kenne übrigens keine SPARC, die alle 520 implementiert.) Die Implementierung von Lese- / Schreib-Dual-Port-Registern ist platzsparend.Und diese müssen mit voller Taktrate arbeiten.Größere Speicheranordnungen erfordern mehr Zeit und überschreiten schnell die Taktrate, was Verzögerungen erfordert.Irgendwann sind Sie wieder im Cache-System.Sie können einen schnelleren L1-Cache (kleiner) mit geringeren Taktzyklusverzögerungen mit zusätzlichen L2 und L3 mit längeren Dealys anordnen.
Haben Sie versucht zu schätzen, wie viel logische Hardware und Siliziumspeicher benötigt werden, um 32 GB Register einzeln zu adressieren (und darauf zuzugreifen)?Und wie hoch wäre die damit verbundene Zugriffslatenz?
Der gesamte Speicher benötigt Platz.Register sind Speicher.Je mehr Platz Sie für Register verwenden, desto weiter entfernen sie sich vom Rest des Kerns.Das macht es langsamer, mit ihnen zu sprechen.
Ziemlich viel Kosten ist der einzige Grund.Dazu benötigen Sie eine CPU von der Größe eines Esstellers, die einige Millionen Dollar pro Stück kostet, die Kühlung mit flüssigem Stickstoff benötigt, einige Kilowatt verbraucht und auch sehr langsam läuft.Warum?Da jeder Befehl jetzt drei Felder für die Registeradressierung enthält, jeweils 64 Bit plus Opcodes, haben Sie ein Befehlswort mit mehr als 200 Bit.
Aber ich weiß, dass AVR dies tatsächlich getan hat: Es hat 512 Wörter Speicher als SRAM gepackt, und plus direkte Speicheradressierung sind diese SRAM effektiv Register.Also ist es tatsächlich möglich und wurde getan.
Welche Register hatten Sie im Sinn, die schneller als 1600 MHz sind? 1 Warten Sie auf Read on 8GB SDRAM?Welches Betriebssystem würde Ihr Konzept unterstützen?Die Kosten für statisches CPU-RAM sind nicht realisierbar, um den inkrementellen Anstieg des kostengünstigen Hochgeschwindigkeits-SDRAM zu rechtfertigen.Einige CPUs haben jetzt L1-, L2- und L3-Cache
@user3528438 Nr. So definieren Sie ein Register: "Ein Speicherort, auf den die CPU direkt zugreifen kann und der als Operanden für Anweisungen verwendet werden kann".Und "Anweisungen" bedeuten mehr als nur Laden / Speichern: eher wie zum Beispiel arithemtische Operationen.Auf den 512 Bytes RAM in einem AVR können Sie keine arithmetischen Operationen direkt ausführen: Diese Bytes sind nicht direkt mit der CPU verbunden.Sie müssen Daten aus dem RAM in die tatsächlichen Register laden und dann die arithmetische Anweisung für die Register ausführen.Interner RAM in MCUs ist kein Registersatz, selbst wenn er sich im selben Chip befindet.Es geht immer noch durch einen Bus.
PIC16-Chips nennen auch alle verfügbaren Speicher "Register", wodurch Sie einige Kilobyte erhalten.Sie unterstützen externen Speicher nicht direkt.
@dim: Was ist, wenn Sie eine Anweisung haben, die im Grunde eine Last + eine andere Operation + einen Speicher kombiniert?Ich denke, eine harte Unterscheidung ist nicht möglich.Traditionell verwenden ISAs CPU-Register, aber im Grunde sind sie nur direkt gesteuerter L0-Cache.
@Michael Es ändert nichts wirklich, wenn es eine Anweisung gibt, mit der das Abrufen eines Werts aus dem Speicher kombiniert und eine arithmetische Operation ausgeführt werden kann.Auf dem x86 stehen solche Anweisungen zur Verfügung. Wäre es dennoch sinnvoll, Ihr 16-GB-DDR-SDRAM als riesigen Registersatz zu betrachten?Die Sache ist: Selbst wenn die CPU diese kombiniert, muss sie einen Abruf durchführen, der über einen Speicherbus läuft, der von einer Speicherschnittstelle auf der CPU-Seite verwaltet wird, und schließlich eine Arbitrierung durchläuft, dann die Adressdecodierung auf der RAM-Seite usw.... alle möglichen Dinge, die für den Zugriff auf ein Register nicht erforderlich sind.
Ich habe einen sehr Low-End-PIC-Chip mit 32 8-Bit-Registern und ohne zusätzlichen Speicher verwendet.Es unterstützte die indirekte Adressierung dieser Register.
Acht antworten:
Wouter van Ooijen
2019-03-04 13:03:22 UTC
view on stackexchange narkive permalink

Zwei Faktoren wirken Ihrer Idee entgegen:

  • Die optimalen Chip-Produktionsprozesse für (D) RAM und Logik (CPU) sind unterschiedlich.Die Kombination beider Chips auf demselben Chip führt zu Kompromissen, und das Ergebnis ist weitaus weniger optimal als das, was mit separaten Chips erzielt werden kann, die jeweils mit einem eigenen optimalen Prozess erstellt wurden.

  • schneller Speicher (Register) benötigt mehr Chipfläche und verbraucht mehr Strom (Energie) als langsamer Speicher.Wenn der CPU-Chip mit sehr schnellem Speicher (CPU-Geschwindigkeit) gefüllt ist, ist die Größe dieses Speichers folglich nicht annähernd so groß wie die von Ihnen erwähnten GB.Dies entspricht eher der aktuellen Größe der schnellsten On-Chip-Caches.

Eine meiner vorherigen Fragen zu den genauen Prozessunterschieden: https://electronics.stackexchange.com/questions/134585/precise-differences-between-dram-and-cmos-processes
Können Sie eine grobe Zahl für den Größenunterschied angeben?Ist es ein Faktor von 2, 20, 200?
Eine @PeteBecker-DRAM-Zelle verwendet 1 Transistor + Kapazität, eine SRAM-Zelle (die eher registerähnlich ist) verwendet ungefähr 6 Transistoren.Daraus können Sie den Größenunterschied abschätzen.
Das ist ein weiterer Unterschied, aber das ist (zusätzlich zu) dem, was ich argumentiert habe.Eine DRAM-Zelle, die in einem CPU-optimierten Prozess implementiert ist, ist einem Hersteller in einem DRAM-optimierten Prozess unterlegen.
Ein Zusatz: Wenn Sie einer CPU eine große Anzahl von Registern hinzufügen und der von den Registern eingenommene Chipbereich zunimmt, werden die Register langsamer.Selbst innerhalb eines einzelnen Prozess- / Registerdesigns, auch ohne Berücksichtigung der Kosten, gibt es einen Kompromiss zwischen Größe und Geschwindigkeit.
user2922073
2019-03-04 18:02:30 UTC
view on stackexchange narkive permalink

Auf dem CPU-Chip ist nicht genügend Platz für eine so große Speichermenge vorhanden. Der aktuelle RAM-Speicher basiert auf DIMMs mit mehreren Chips.

Die Kosten sind ebenfalls ein Problem. Der CPU-Chip-Speicherplatz ist aufgrund eines anderen Herstellungsprozesses teurer.

Zu diesem Zweck haben wir derzeit CPU-Caches (Speicher auf dem Chip), die so groß wie möglich sind.Für die meisten Zwecke ist es nicht erforderlich, diesen Cache direkt adressierbar zu machen.

Hier ist der Würfel eines i7-5960X mit einem 20 MB L3-Cache:

img

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

Sehr interessantes Bild!Was ist der Bereich auf der rechten Seite?Ich kann nicht glauben, dass es ein ungenutzter Raum ist.
@Gp2mv3 - der Bereich rechts ist ein Steckbrett.Sie können Ihren Chip anpassen.
Bitte geben Sie einen Link oder zumindest ein Zitat für die Originalquelle des Bildes an, das Sie in Ihre Antwort aufnehmen.
@Gp2mv3 Reserviert für NSA-Hardware?
user4574
2019-03-04 22:48:19 UTC
view on stackexchange narkive permalink

Ich denke, der Hauptgrund, warum dies nicht getan wurde, ist, dass die Leistung möglicherweise nicht so stark verbessert wird, wie man denkt.

1) Eine CPU mit einem großen Registersatz müsste wahrscheinlich mit einer niedrigeren Taktrate laufen als eine mit einem kleinen Registersatz.

a) Erinnerungen sind im Wesentlichen sehr große Muxes. Je größer der Mux, desto mehr Transistoren müssen beteiligt sein, um einen Zugriff durchzuführen. Je mehr Transistoren Sie benötigen, desto langsamer läuft sie, entweder weil mehr Logikstufen vorhanden sind oder weil mehr Transistoren an denselben Knoten angeschlossen sind (also höhere Kapazität). Es gibt einen Grund, warum Speicher nicht mit der gleichen Geschwindigkeit wie die CPU-Logik ausgeführt werden.

b) Das Implementieren von so viel Speicher benötigt viel Siliziumraum. Es braucht Zeit, bis sich Signale physikalisch über ein größeres Stück Silizium ausbreiten (Routing-Verzögerung). Nur weil es größer ist, ist es unwahrscheinlich, dass das Gerät mit der gleichen Geschwindigkeit wie eine physisch kleinere CPU betrieben werden kann.

2) Die binären Codierungen der Maschinenanweisungen würden viel weniger effizient sein, wenn Sie mehr Register hinzufügen. Wenn Ihre CPU beispielsweise 4 Register hat, benötigen Sie 2 Bits, um eine Registerauswahl zu codieren. Wenn Ihre CPU über 4 Milliarden 64-Bit-Register verfügt (32 GB), benötigen Sie 32 Bit, um jedes Register auszuwählen.

Nehmen wir zum Beispiel einen Befehl, der das logische ODER zweier Register berechnet und das Ergebnis in einem dritten Register speichert.

Für eine CPU mit 4 Registern müssen Sie 6 Bits reservieren, um die Operanden- und Zielauswahl zu codieren.

Für eine CPU mit 4 Milliarden Registern müssen Sie nicht 96 Bit Operandenraum verwenden, um die Registerauswahl zu codieren.

Anweisungen, die früher 16 Bit benötigten, können jetzt 128 Bit benötigen. Die Größe der Programme würde in Bezug auf die Speichernutzung viel größer werden, ohne notwendigerweise ihre Funktionalität zu erweitern.

Man könnte natürlich klug sein und einige Befehlscodierungen erstellen, die nur die ersten X-Registerpositionen verwenden, um Bits zu speichern.Aber dann sind wir wieder beim ursprünglichen Registerkonzept.



Es gibt Geräte mit Einzelzyklus-Speicherzugriff, aber sie sind Mikrocontroller oder Systeme auf einem Chip und haben normalerweise viel niedrigere Taktraten als die CPU in einem PC.Sie sind normalerweise auf einige 10s bis 100s MHz für den Speicherzugriff mit einem Zyklus beschränkt.Und selbst in diesen Fällen sind die Speichergrößen normalerweise nicht GB.

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

Wenn Sie einer CPU mehr Register hinzufügen, wird die Zugriffszeit immer langsamer, da Sie Logik benötigen, um beispielsweise eines von 1024 Registern anstelle eines von 16 auszuwählen.

Und Register sind schnell, weil sie meistens direkt mit verschiedenen Dingen verbunden sind (Eingabe und Ausgabe von ALUs).Sie können dies mit 16 Registern tun, nicht mit 1024.

Der L1-Cache ist ungefähr so schnell wie die Register, verliert jedoch aufgrund der Probleme bei der Auswahl der richtigen Daten und der Datenübertragung an Geschwindigkeit.Der L1-Cache wird mit der Größe auch langsamer.Und dann gibt es natürlich Kosten.Schauen Sie sich die Preise für CPUs mit 20 MB L3-Cache an.Auf diese Weise können Sie erraten, wie viel 64 GB L3-Cache vorhanden sind.

Sie benötigen längere Registeradressfelder innerhalb des Befehlsformats, um mehr Register zu adressieren.Ein 16-Bit-Befehl, der zwei verschiedene Register von 256 Registern adressiert, wäre unmöglich, es sind keine Bits mehr für den Befehl übrig.
@Uwe Es sei denn, es ist eine [TTA] (https://en.wikipedia.org/wiki/Transport_triggered_architecture)!: P.
Neil_UK
2019-03-04 12:18:54 UTC
view on stackexchange narkive permalink

Kosten.Schneller Speicher ist weniger dicht als langsamer Speicher und erfordert mehr Chipfläche für eine bestimmte Speichermenge.Und die Fläche ist teuer.

Nicht wirklich.Zumindest nicht monetäre Kosten.Das erste Problem ist, dass es einfach nicht klar ist, wie Sie so viel Speicher so eng an einen einzelnen Kern gekoppelt bekommen, dass er der Leistung einer Registerdatei entspricht, unabhängig davon, wie viel Geld Sie haben.
Kommt schon, Leute, dies war eine provokative Antwort, die einige von euch dazu anregen sollte, die Tugenden der Hierarchie zu preisen, für die ich aufgrund anderer Verpflichtungen keine Zeit habe. Erwähne sogar SPARC mit seinen über 192 Registern, die sich in Banken von überlappen8/24
Obwohl ich gerne provokative Antworten lese und selbst mindestens ein oder zwei geschrieben habe, sind sie ehrlich gesagt nicht so hilfreich ...
Chris Jefferson
2019-03-04 17:46:03 UTC
view on stackexchange narkive permalink

In gewisser Weise hängt es davon ab, was Sie unter "Registern" verstehen.Es gibt natürliche Kompromisse zwischen:

  • Kosten - Schneller Zugriff ist teurer
  • Hitze - schneller Zugang erzeugt mehr Wärme
  • Größe - größere Datenblöcke sind langsamer zugänglich - selbst wenn Sie die Kosten ignorieren, können Sie die Register nicht größer skalieren und erwarten, dass sie die gleiche Geschwindigkeit beibehalten, da Sie von überall aus "Daten abrufen" müssenes wird auf dem Chip gespeichert.

Eine der ersten CPUs, der Intel 4004, konnte (und wurde oft) ohne RAM verwendet werden und hatte keinen Cache, sodass die gewünschte CPU vorhanden ist (obwohl noch ein ROM zum Speichern des Programms verwendet wurde).

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

Optimierung.

Natürlich wäre es wirklich schön, unendlich viele schnelle Register für die Speicherung zu haben. Der Grund dafür, dass Register so schnell sind, ist die Nähe zu den anderen Teilen der CPU. Wenn Sie also die Anzahl der Register begrenzen, werden sie schneller. Sie haben die Wahl zwischen einigen wirklich schnellen Registern oder mehr Registern, die langsamer sind.

Außerdem werden Register mit teuren Transistoren auf dem Hauptchip aufgebaut. RAM ist auch sehr schnell, aber billiger, aber nicht so billig, dass Sie alle Ihre Speicheranforderungen im RAM implementieren können.

Auch Register sind nicht alle gleich. Es lohnt sich, ein paar wirklich schnelle Register zu haben, die für den Kern geschlossen sind und mit nur wenigen Bits adressiert werden können, und die anderen Register etwas langsamer zu haben.

Es ist die Pareto-Regel (17. Jahrhundert), dass 80 Prozent der Arbeit in nur 20 Prozent der Register erledigt werden können. Stellen Sie daher besser sicher, dass dies die schnellsten Register sind, die Sie haben.

Zwischen Registern und RAM gibt es verschiedene Speicherkategorien in Bezug auf Geschwindigkeit und Kosten. Durch sorgfältige Dimensionierung der Caches L1, L2 und L3 können Sie das Verhältnis von Leistung zu Kosten Ihres Supercomputers verbessern.

Wir verwenden HD oder SSD für Giga / Tera-Byte-Speicher, aber auch hier benötigen wir mehr Speicher, als wir bezahlen können. Daher müssen einige wirklich große Archive, die nicht so schnell benötigt werden, auf Band ausgelagert werden.

Zusammenfassung: Wenn Sie Ihr Geld über diese Hierarchie von Speicheroptionen verteilen, erhalten Sie das Beste für Ihr Geld:

Register, L1 / 2/3 Caches, RAM, SSD, HD, Band

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

Es ist nicht erforderlich, "den gesamten Speicher als Register" zu erstellen. Register sind ein Programmierkonzept und tief in den Verarbeitungskern eingebettet. Eine CPU mit einer Million Registern wäre lächerlich kompliziert und nicht sehr effizient. Sie sehen, welche Register ein Programm verwendet, ist im Programm tatsächlich "fest codiert". Es ist der Compiler , der entscheidet, was in welches Register geht, wenn er das Programm kompiliert. Mit Speicher können Sie einfach so viel dynamisch zuweisen, wie Sie benötigen. Haben Sie eine Datei mit einer Größe von 10 MB? Reservieren Sie so viel RAM zum Einlesen. Mit Registern ist das nicht möglich. Sie müssen im Voraus wissen, welche Sie verwenden werden. Register sind nicht dazu gedacht, so verwendet zu werden.

Nein, was Sie wirklich wollen, ist RAM - nur ein schneller RAM. RAM, der mit der gleichen Technologie aufgebaut ist, die auch in Registern und CPU-Caches verwendet wird. Und das ... existiert tatsächlich.

Es gibt diesen schönen alten Artikel, der vor 12 Jahren geschrieben wurde, aber immer noch relevant ist, denke ich. Ich rate Ihnen dringend, es zu lesen. Es erklärt gut, wie der Computerspeicher funktioniert. Obwohl es sehr detailliert ist, wird es etwas trocken.

Wie auch immer, der Autor beschreibt darin zwei Hauptmethoden zum Erstellen von Speicher - DRAM und SRAM.

DRAM basiert auf Kondensatoren - "1" wird durch einen geladenen Kondensator und "0" durch einen entladenen Kondensator dargestellt. Dies ist einfach und kostengünstig und basiert auf RAM heute. Es ist auch die Quelle all seiner Nachteile und Langsamkeit - das Laden / Entladen braucht Zeit.

SRAM basiert auf mehreren Transistoren und deren Zustand. Es ist viel schneller, aber auch viel komplizierter herzustellen (Drähte müssen sich für jedes Bit kreuzen) - daher teurer. Es ist auch viel machtgieriger. Dies wird für CPU-Caches verwendet (und ich vermute Register).

Die Sache ist - es gibt Geräte, bei denen der RAM eher auf SRAM als auf DRAM basiert.Aber der Preis ist nur durch das Dach.Daher wird diese Art von RAM häufiger in kleinen Mengen in speziellen Geräten (wie Netzwerk-Switches) und als CPU-Caches verwendet.

Übrigens - es gibt auch einen Grund, warum CPU-Caches so klein sind (nur ein paar MB).Je größer der Cache ist, desto länger dauert es, die erforderlichen Bytes zu finden.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...