Können wir einen Computer mit nur Registern als Speicher haben?

8

Register sind die schnellsten Speicher in einem Computer. Also, wenn wir einen Computer mit nur Registern und nicht einmal Caches erstellen wollen, ist es möglich? Ich denke daran, die Magnetplatten sogar durch Register zu ersetzen, obwohl sie natürlich flüchtige Erinnerungen sind. Haben wir einige nichtflüchtige Register für diesen Zweck? Es würde so schnell werden! Ich frage mich nur, ob das passieren könnte oder nicht?

    
Kamran 26.09.2010, 16:31
quelle

10 Antworten

11

Die sehr kurze Antwort ist ja, theoretisch könnte man das, aber im wirklichen Leben funktioniert das nicht wirklich . Lass es mich erklären ...

Der Grund für die Speicherhierarchie liegt darin, dass diese kleinen und schnellen Speicher für jedes Bit sehr teuer sind (Register), während die großen und langsamen Speicher sehr billig sind (Festplatten).

Ein weiterer Grund, warum eine große Anzahl von Registern sehr unpraktisch ist, liegt darin, dass die Anweisungen auf den Speicherort verweisen müssen . Wenn Sie nur eine Handvoll von Registern haben, können Sie die Register- (oder Register-) Nummer und einen Opcode in einer Handvoll Bits speichern, was bedeutet, dass niedrige Registerzahlen für kurze und schnelle Befehle sorgen . Wenn Sie eine Sammlung von Registern mit mehreren Gigabyte haben, müssen Sie in der Lage sein, sie in Anweisungen zu referenzieren, und diese Anweisungen werden viel länger (und daher langsamer) sein. Denken Sie daran, dass einige Dinge viel schneller wären, wenn alles ein Register wäre, aber durch eine kleinere Anzahl von Registern sind bestimmte Dinge (dh das meiste, was Sie mit einem Computer machen) viel schneller.

Eine große Anzahl von Registern würde der Hardware zusätzlich eine Komplexität hinzufügen, die das Lesen und Schreiben in Register verarbeitet, was alles langsamer machen würde.

Obwohl die meisten von uns in Bezug auf Computer denken, gibt es sicherlich einfache Geräte, die nur Register haben, aber sie haben auch nur eine sehr begrenzte Menge an Speicher und sind nicht für allgemeine Berechnungen geeignet.

Vielleicht interessiert Sie auch meine Antwort auf Assembly: Warum kümmern wir uns um Register?

    
David Johnstone 04.10.2010 10:00
quelle
3

Die Register sind schnell, weil die meisten Register direkt mit den meisten Funktionseinheiten verbunden sind. Während ein Programm ein Register lädt, gibt ein anderes Register die ALU und noch ein anderes Register schreibt ein Ergebnis von einer anderen funktionellen Einheit.

Register werden mit logischen Elementen wie Flip-Flops erstellt, so dass die meisten Werte aus den meisten Registern alle gleichzeitig zur Verfügung stehen. Dies unterscheidet sich von einem Speicher, in dem nur eine ausgewählte Adresse zu jeder Zeit verfügbar ist und nur eine sehr begrenzte Anzahl von Leseports verfügbar ist. Normalerweise ist es nur eine Leseschaltung.

Diese Art der Implementierung und Verbindung verbraucht jedoch den Chipflächen auf dem Mikroprozessor. Wenn das aufgebraucht ist, beginnen Sie, Speicher für zusätzlichen Speicher hinzuzufügen.

Es gab Architekturen mit zusätzlichen Registern. ( SPARC !)

    
DigitalRoss 26.09.2010 16:37
quelle
1

Das Problem dabei ist, dass Register in der CPU vorhanden sind. Da es in der CPU vorhanden ist, hat es minimale Latenz. Auch wegen seiner geringeren Größe. Wenn Sie die Größe erhöhen, sagen Sie, dass Sie einen großen Prozessor mit vielen Transistoren (Flip-Flops) bauen, die die Register halten, dann werden die Wärmeableitung, der Energieverbrauch, die Kosten usw. enorm sein. Auch wenn der Raum zunimmt, erhöht sich auch die Latenz. Im Grunde gibt es also keinen großen Unterschied. Es ist eigentlich schlimmer.

    
kadaj 04.10.2010 09:30
quelle
1

Die meisten dieser Antworten beziehen sich darauf, ob es praktisch wäre. David Johnstone erwähnt auch die Tatsache, dass ein Registername in jeder Anweisung, die ihn berührt, erwähnt werden muss. Außerdem sind in den meisten modernen Befehlssätzen in einem Befehl immer Operandenregister codiert. Z.B. Es gibt die Anweisung mov %eax, %ebx und die Anweisung mov %eax, %ecx . Es kann vorkommen, dass ihre Binärdarstellung so aussieht:

%Vor%

und unterscheidet sich nur dadurch, dass dest reg gleich 3 statt 2 ist - aber auch nicht! (Ich habe nicht überprüft, wie diese speziellen Anweisungen in 386 dargestellt werden, aber ich erinnere mich, dass es Beispiele in diesem Anweisungssatz von Anweisungen gibt, die leicht in solche Felder und Beispiele, in denen sie nicht enthalten sind, unterteilt sind.)

Das Problem besteht darin, dass die meisten interessanten Programme an Informationsstandorten arbeiten wollen, die zur Laufzeit festgelegt werden. Z.B. In dieser Iteration der Schleife wollen wir auf Byte 37 schauen; die nächste Iteration wird uns an Byte 38 usw. interessieren.

Ich werde es nicht beweisen, aber ich vermute, dass, um etwas zu bekommen, das sich Turing nähert, Ihre Programme entweder:

brauchen
  • Anweisungen, die Register basierend auf dem Wert in einem anderen -Register adressieren, z. "Gehe vom Register X zum Register Y, wo X und Y durch die Werte in den Registern 1 und 2 angezeigt werden.", Oder
  • selbst modifizierender Code.

In der Schule hatten wir einen theoretischen Computer mit 100 Registern (plus Akkumulator) und 10 Anweisungen, von denen jede eine dreistellige Dezimalzahl war. Die erste Ziffer zeigte die Operation an (laden, speichern, arithmetisch, springen, bedingter Sprung, Halt), und die letzten beiden waren das zu operierende Register. Viele Beispielprogramme könnten dafür geschrieben werden, wie die faktorielle Funktion. Aber es wurde bald offensichtlich, dass ein statisches Programm nur mit einer festen Datenmenge arbeiten konnte. Wenn Sie eine Schleife schreiben möchten, um die Werte in einer Liste zu summieren, benötigen Sie eine Anweisung LOAD, die bei jeder Iteration auf ein anderes Eingaberegister zeigt. Das bedeutet, dass Sie den neuen Code für den Ladebefehl jedes Mal arithmetisch berechnen und den Code kurz vor dem Ausführen des Befehls patchen.

    
Edmund 04.10.2010 10:43
quelle
1

Für jedes Register von 32 Bit benötigen Sie mindestens 9x32 Gatter von xor. Das sind viele Tore.

Das größere Problem tritt auf, wenn die Registerdaten über den Bus übertragen werden sollen. Welcher hält den Bass? möchtest du mehr Bass hinzufügen?

Sagen wir, wir haben 10 Register, machen wir einen Bus mit 10 Linien? was bedeutet, dass wir 10 Busanschlüsse haben, die mit den meisten Systemen verbunden sind? Das ist eine Menge Kabel, jetzt wollen Sie, dass das Register etwas bedeutet, richtig?

lässt sich einfach abschätzen, wie viel Bass wir für 1 kb Daten benötigen?

1024 bit = 1024 * 9 * 32 Gates und 1024 Basslinien in der CPU.

wir wissen, dass Intel mit 30 nm für ein Gate arbeitet. Das sind 30 Millionen Tore, die das Gate-Problem mehr redandent, aber wie wollen Sie das Bass-Problem lösen?

    
none 04.10.2010 09:39
quelle
1

Moderne GPUs haben ungefähr 5 MB Register und sehr wenig Caches (im Vergleich zu CPUs). Also ist es möglich, einen Prozessor mit vielen Registern zu haben.

Aber Sie brauchen noch eine Speicherhierarchie (Register - & gt; Scratchpad / Caches - & gt; Gerätespeicher - & gt; CPU-Speicher). Beachten Sie auch, dass GPUs völlig unterschiedliche Biester sind, in dem Sinne, dass sie vom ersten Tag an mit massiven Parallelitätszielen erstellt wurden und dass GPUs keine Allzweck-, sondern Koprozessoren sind.

Jeder GPU-Thread nimmt einige Register auf - das gesamte GPU-Programm ist Register-zugeordnet - was zu Tausenden von Threads führt, die parallel ausgeführt / angehalten / fortgesetzt werden können. Threads werden verwendet, um die Speicherlatenz auf GPUs zu verbergen, während auf CPUs riesige Caches für diesen Zweck verwendet werden. Denken Sie daran, wie Hyper-Threading bis zum Äußersten gedrückt.

    
Stringer 07.11.2010 11:04
quelle
0

Sie brauchen nicht einmal Register - es ist möglich, etwas wie eine Turing-Maschine zu erstellen, die einen Datenstrom von Eingabecode und Daten aufnimmt und einen Ausgabestrom erzeugt. Das ist etwas, mit dem Computer angefangen haben.

    
quelle
0

Es ist möglich, aber absolut unpraktisch - sogar Low-End-Computer haben heute 2 Gigabyte RAM. Wie würden Sie mit zwei Milliarden Registern im Code umgehen (und wo würden Sie sie physisch stopfen)?

Was würden Sie damit machen, dass die Geschwindigkeit von RAM (und sogar Prozessor-Caches) ein Problem ist? Entweder führen Sie das System aus dem RAM (schnell genug), oder bauen Sie einen speziellen Prozessor.

    
Piskvor 26.09.2010 16:35
quelle
0

Hot Off der Rouncer Hardware Theorie Platte- & gt;

Wenn Sie es schaffen, jede Permutation der Adressbits mit den einzelnen Wörtern zu verknüpfen, dann könnten Sie ein RAM-Registersystem haben. Stellen Sie sich vor, wenn Sie nand verwenden, um die Adressgruppen zu erstellen. (Mit anderen Worten, verbinden Sie das Gegenteil der Adresse mit dem Flop) One nicht, und Sie haben die Adressierung mit Drähten allein gemacht + die kleine nicht Schalter, die eine Magnetspule sein könnte, die nicht den Wert. dann jedes Register oder in den gleichen Ausgang - die Content-Pins. Und nur die Adresse, die vergangen war, wird an die Ausgangsinhalts-Pins angeschlossen.

Simple.

    
quelle
-1

Der Grund, warum Sie so wenig Speicher bekommen, ist, dass es unglaublich teuer ist. Deshalb haben wir die Speicherhierarchie.

    
raicuandi 26.09.2010 16:33
quelle

Tags und Links