CPU: Unterschied zwischen den Versionen
K Textersetzung - „Kurzbeschreibung“ durch „Beschreibung“ |
|||
(112 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
''' | '''topic''' - Beschreibung | ||
== Beschreibung == | |||
=Funktion= | ==Funktion== | ||
Mikroprozessoren sind hochkomplexe Maschinen. Sie basieren jedoch | Mikroprozessoren sind hochkomplexe Maschinen. Sie basieren jedoch | ||
auf einem einfachen Grundprinzip. Wer es kennt, versteht auch die | auf einem einfachen Grundprinzip. Wer es kennt, versteht auch die | ||
Funktionsweise der modernen CPUs. | Funktionsweise der modernen CPUs. | ||
=History= | ==History== | ||
* Die Von-Neumann-Architektur besteht aus vier Funktionseinheiten, die in Bild 1 zu sehen sind: Rechenwerk, Steuerwerk, Speicher (Memory) und Ein-/Ausgabeeinheit (I/O-Unit). | * Die Von-Neumann-Architektur besteht aus vier Funktionseinheiten, die in Bild 1 zu sehen sind: Rechenwerk, Steuerwerk, Speicher (Memory) und Ein-/Ausgabeeinheit (I/O-Unit). | ||
* Dazu kommen noch die Verbindungen zwischen den Funktionsblöcken - das Bussystem. | * Dazu kommen noch die Verbindungen zwischen den Funktionsblöcken - das Bussystem. | ||
* Die beiden wichtigsten Einheiten Rechenwerk und Steuerwerk sind im Prozessor vereint. | * Die beiden wichtigsten Einheiten Rechenwerk und Steuerwerk sind im Prozessor vereint. | ||
* Die CPU als Ganzes übernimmt innerhalb des Von-Neumann-Rechners die Ausführung von Befehlen und die notwendige Ablaufsteuerung. | * Die CPU als Ganzes übernimmt innerhalb des Von-Neumann-Rechners die Ausführung von Befehlen und die notwendige Ablaufsteuerung. | ||
[[Datei:Bild 001.png|mini]] | |||
'''Von-Neumann-Rechner:''' Er beinhaltete schon vor 50 Jahren die wesentlichen Bestandteile heutiger PCs. | |||
* Die Anpassung für jedes zu lösende Problem erfolgt mit im Speicher abgelegten Programmen. | ==Von-Neumann-Rechner== | ||
* Die Anpassung für jedes zu lösende Problem erfolgt mit im Speicher abgelegten Programmen. | |||
* Diese Software beinhaltet die Informationen zur Steuerung des Rechners. | * Diese Software beinhaltet die Informationen zur Steuerung des Rechners. | ||
* Jede Speicherzelle ist mit einer festen Adresse eindeutig identifizierbar. | * Jede Speicherzelle ist mit einer festen Adresse eindeutig identifizierbar. | ||
* In ihrer ursprünglichen Form verarbeitet sie mit nur einem Prozessor Schritt für Schritt Befehle und Daten, die aus dem Speicher stammen. | * In ihrer ursprünglichen Form verarbeitet sie mit nur einem Prozessor Schritt für Schritt Befehle und Daten, die aus dem Speicher stammen. | ||
* Obwohl Befehle und Daten aus dem gleichen Speicher kommen, gibt es nur eine Busverbindung für Beides dorthin. | ** Obwohl Befehle und Daten aus dem gleichen Speicher kommen, gibt es nur eine Busverbindung für Beides dorthin. | ||
* So wurde eine hierarchisch gegliederte Speicherstruktur mit Registern und verschiedenen Cache-Ebenen eingeführt. | ** So wurde eine hierarchisch gegliederte Speicherstruktur mit Registern und verschiedenen Cache-Ebenen eingeführt. | ||
* Die sequenzielle Befehlsausführung wird in der CPU nach Kräften parallelisiert. | ** Die sequenzielle Befehlsausführung wird in der CPU nach Kräften parallelisiert. | ||
* Dazu stehen mehrere Funktionseinheiten und Ausführungsebenen bereit. | ** Dazu stehen mehrere Funktionseinheiten und Ausführungsebenen bereit. | ||
==Erweiterte Architektur== | |||
* Der Von-Neumann-Rechner holt alle Befehle und Daten direkt aus dem Speicher. Für die heutigen CPUs wäre das viel zu langsam. | |||
* Diese CPU orientiert sich hinsichtlich ihrer Arbeitsweise stark an den x86-Prozessor der PCs. | |||
* Deshalb besitzt sie einen zusätzlichen Registersatz, der den Zugriff auf Befehle und Daten ohne Wartezyklen ermöglicht. | |||
** Es handelt sich um Mehrzweckregister für Befehle und Daten. | |||
** Das Adresswerk ist für die Berechnung der effektiven Adresse zuständig. | |||
** Zusätzlich entkoppelt der L1-Cache den Prozessorkern vom langsamen externen Speicher. | |||
[[Datei:Bild 002.png|mini]] | |||
'''Bild 2''' | |||
'''Beispiel-Prozessor:''' Die erweiterte CPU hat schon alles, was einen einfachen Mikroprozessor ausmacht. | |||
===Grundsätzliche Programmablauf im Prozessor === | |||
==== Holphase (Fetch) ==== | |||
Zunächst muss ein Befehl aus dem Speicher geladen werden. Wenn sich die gesuchte Information noch nicht im L1-Cache befindet, muss die Busschnittstelle dafür den Speicher ansprechen. | |||
==== Dekodierphase (Decode) ==== | |||
Das Steuerwerk untersucht den Befehl hinsichtlich der vorzunehmenden Arbeitsschritte. Es entscheidet, welche Operation (Addition, Subtraktion, logische Verknüpfung und so weiter) die ALU auszuführen hat. | |||
==== Ausführungsphase (Execute) ==== | |||
Die ALU wird vom Steuerwerk nun angewiesen, die gewünschte Operation mit den geladenen Daten auszuführen | |||
==== Schreibphase (Write Back) ==== | |||
Das Ergebnis der Operation landet in einem der Register oder im Speicher. Um langwierige Zugriffe auf das externe RAM zu vermeiden, sammelt die CPU die Daten eventuell im L1-Cache, damit sie später in einem schnellen Blockschreibvorgang übertragen werden können. | |||
==Steuereinheit (CU)== | |||
* Die CU ist die Kommandozentrale der CPU. | |||
* Sie steuert alle Abläufe im Inneren des Prozessors sowie seine Kommunikation nach außen. | |||
* Die CU holt sich einen Befehl aus dem Arbeitsspeicher/Cache und speichert ihn in einem Register zwischen. | |||
* Damit ist der CPU-Bus frei für weitere Aktionen. | |||
* Im Befehlsdecoder untersucht die CU die einzelnen Bit des Kommandos dann genauer. | |||
** Aus einem Teil der Information ergibt sich der weitere logische und zeitliche Ablauf bei der Befehlsausführung. | |||
** Handelt es sich um einen fest implementierten Befehl, werden sofort die entsprechenden Schritte in der Ablaufsteuerung eingeleitet. | |||
** Sind alle zur Steuerung notwendigen Informationen gesammelt, beginnt die Ablaufsteuerung damit, das System zu koordinieren. | |||
** Dazu gehört auch die Steuerung der BIU, um die Operanden für die Rechenbefehle in die Register zu laden. | |||
[[Datei:Bild 003.png|mini]] | |||
* Die ALU ist in der CPU für die Rechenarbeit zuständig. | |||
* Alle aktuellen PC-Prozessoren besitzen neben einem oder mehreren dieser Rechenwerke für Ganzzahlen auch solche für Fließkommaarithmetik. | '''Bild 3''' | ||
* Das Bild zeigt den Datenweg unserer Beispiel-CPU. | |||
'''Control Unit:''' Die CU steuert alle Abläufe im Innern des Prozessors sowie seine Kommunikation nach außen. | |||
==Rechenwerk (ALU)== | |||
* Die ALU ist in der CPU für die Rechenarbeit zuständig. | |||
* Alle aktuellen PC-Prozessoren besitzen neben einem oder mehreren dieser Rechenwerke für Ganzzahlen auch solche für Fließkommaarithmetik. | |||
* Das Bild zeigt den Datenweg unserer Beispiel-CPU. | |||
* Die CU steuert die ALU, die auf Anweisung die beiden Operanden aus dem Registersatz holt, mit denen sie rechnen soll. | * Die CU steuert die ALU, die auf Anweisung die beiden Operanden aus dem Registersatz holt, mit denen sie rechnen soll. | ||
* Sie werden zunächst in den beiden Hilfsregistern zwischengepuffert, damit sie während der gesamten Rechenoperation stabil anliegen. | ** Sie werden zunächst in den beiden Hilfsregistern zwischengepuffert, damit sie während der gesamten Rechenoperation stabil anliegen. | ||
* Im nächsten Schritt führt die ALU die von der CU geforderte Rechenoperation aus. | ** Im nächsten Schritt führt die ALU die von der CU geforderte Rechenoperation aus. | ||
* Das Resultat wird schließlich im Ergebnisregister zwischengepuffert, damit sich die ALU sofort der nächsten Aufgabe zuwenden kann. | ** Das Resultat wird schließlich im Ergebnisregister zwischengepuffert, damit sich die ALU sofort der nächsten Aufgabe zuwenden kann. | ||
[[Datei:Bild 004.png|mini]] | |||
'''Bild 4''' | |||
'''Arithmetical and Logical Unit: Die ALU und ihr Datenweg. Die Hilfsregister für die Operanden und Ergebnisse gehören zu diesem | '''Arithmetical and Logical Unit:''' Die ALU und ihr Datenweg. Die Hilfsregister für die Operanden und Ergebnisse gehören zu diesem Funktionsblock. | ||
=Adresseinheit (AU) & Busschnittstelle (BIU)= | ==Adresseinheit (AU) & Busschnittstelle (BIU)== | ||
* Der Aufbau der AU mit einem zentralen Addierer in Bild 5 ähnelt dem der ALU. | * Der Aufbau der AU mit einem zentralen Addierer in Bild 5 ähnelt dem der ALU. | ||
* Tatsächlich wurde die Adressberechnung bei den ersten Prozessoren auch noch in dieser erledigt. | * Tatsächlich wurde die Adressberechnung bei den ersten Prozessoren auch noch in dieser erledigt. | ||
* Die spezialisierte AU erledigt das jedoch schneller und vor allem parallel zur ALU. | * Die spezialisierte AU erledigt das jedoch schneller und vor allem parallel zur ALU. | ||
* Der Decoder ist im einfachsten Fall als Linksschieberegister realisiert. | * Der Decoder ist im einfachsten Fall als Linksschieberegister realisiert. | ||
* Dieser Barrel Shifter extrahiert die Adressinformation aus dem Befehl durch Verschieben des Befehlscodes um n | * Dieser Barrel Shifter[[https://de.wikipedia.org/wiki/Barrel-Shifter]] extrahiert die Adressinformation aus dem Befehl durch Verschieben des Befehlscodes um n Bit in nur einem Taktzyklus. | ||
* Die extrahierte Grundadresse gelangt dann in Hilfsregister A, wo Sie stabil anliegt bis der Addierer seine Arbeit beendet hat. | * Die extrahierte Grundadresse gelangt dann in Hilfsregister A, wo Sie stabil anliegt bis der Addierer seine Arbeit beendet hat. | ||
* Hilfsregister B beinhaltet den Inhalt des Programmzählers oder den des BIU-Adresspuffers. | ** Hilfsregister B beinhaltet den Inhalt des Programmzählers oder den des BIU-Adresspuffers. | ||
* Die komplexere MMU realer PC-Prozessoren kann darüber hinaus virtuelle Adressen verwalten. | ** Die komplexere MMU (Memory management unit) realer PC-Prozessoren kann darüber hinaus virtuelle Adressen verwalten. | ||
* Das Betriebssystem lagert hierbei den Speicher blockweise auf die Festplatte aus. | ** Das Betriebssystem lagert hierbei den Speicher blockweise auf die Festplatte aus. | ||
* Greift die CPU auf den ausgelagerten Speicher zu, verursacht das einen Seitenfehler, der die MMU zum Handeln veranlasst. | ** Greift die CPU auf den ausgelagerten Speicher zu, verursacht das einen Seitenfehler, der die MMU (Memory management unit) zum Handeln veranlasst. | ||
* Das Betriebssystem blendet dann den gewünschten Speicherbereich in das RAM des PCs ein und lagert einen gerade nicht benötigten dafür aus. | ** Das Betriebssystem blendet dann den gewünschten Speicherbereich in das RAM des PCs ein und lagert einen gerade nicht benötigten dafür aus. | ||
* Den virtuellen Speicher kann die CPU dank MMU so ansprechen, als wäre er real existierendes RAM. | ** Den virtuellen Speicher kann die CPU dank MMU (Memory management unit) so ansprechen, als wäre er real existierendes RAM. | ||
[[Datei:Bild 005.png|mini]] | |||
''' | '''Bild 5''' | ||
=Busschnittstelle (BIU)= | '''Address Unit:''' Die AU sorgt für die Berechnung der Adresse. In modernen CPUs verseht eine leistungsfähigere MMU (Memory management unit) diesen Dienst. | ||
==Busschnittstelle (BIU)== | |||
* Die Busschnittstelle verbindet die internen Busse des Prozessors mit der Außenwelt. | * Die Busschnittstelle verbindet die internen Busse des Prozessors mit der Außenwelt. | ||
* Sie enthält Puffer zur Zwischenspeicherung von Adressen, Daten und Steuersignalen. | * Sie enthält Puffer zur Zwischenspeicherung von Adressen, Daten und Steuersignalen. | ||
* Die CPU arbeitet intern mit einer möglichst niedrigen Spannung, damit die Erwärmung bei hohen Taktfrequenzen in erträglichen Grenzen bleibt. | * Die CPU arbeitet intern mit einer möglichst niedrigen Spannung, damit die Erwärmung bei hohen Taktfrequenzen in erträglichen Grenzen bleibt. | ||
* Die BIU sorgt deshalb auch für eine Pegelanpassung zwischen dem CPU-Kern und dem externen Bussystem. | * Die BIU sorgt deshalb auch für eine Pegelanpassung zwischen dem CPU-Kern und dem externen Bussystem. | ||
=Cache-Grundlagen= | ==Cache-Grundlagen== | ||
* | * Cache sitzt in der CPU zwischen den extrem schnellen Funktionseinheiten und dem langsamen Arbeitsspeicher der L1-Cache. | ||
* Aus Platzgründen kann der L1-Cache in der CPU nicht besonders groß sein. | * Aus Platzgründen kann der L1-Cache in der CPU nicht besonders groß sein. | ||
* Er bewegt sich in der Regel in Größenordnungen von 16 bis 64 KByte. | * Er bewegt sich in der Regel in Größenordnungen von 16 bis 64 KByte. | ||
* Die Kunst besteht also darin, den schnellen kleinen Speicher so mit dem langsamen großen Arbeitsspeicher zu kombinieren, dass sich eine möglichst schnelle Gesamtlösung ergibt. | * Die Kunst besteht also darin, den schnellen kleinen Speicher so mit dem langsamen großen Arbeitsspeicher zu kombinieren, dass sich eine möglichst schnelle Gesamtlösung ergibt. | ||
* Bild 6 zeigt die Auswertung einer 32-Bit-Adresse nach diesem Prinzip. | |||
[[Datei:Bild 006.png|mini]] | |||
'''Bild 6''' | |||
'''Cache Interna:''' Der prinzipielle Aufbau eines Caches (oben) sowie die Adressauswertung im Cache-Controller (unten). | |||
=== Briefträger bei der Arbeit === | |||
* Er trägt in einer Stadt (Arbeitsspeicher) die Post (Daten) aus. | * Er trägt in einer Stadt (Arbeitsspeicher) die Post (Daten) aus. | ||
* Dafür sortiert er die Post in seiner Tasche nach Straßen (Tag). | * Dafür sortiert er die Post in seiner Tasche nach Straßen (Tag). | ||
* In einer Straße holt er sich die hierfür bestimmte Post heraus und verteilt sie an die Häuser (Set-Zeile). | * In einer Straße holt er sich die hierfür bestimmte Post heraus und verteilt sie an die Häuser (Set-Zeile). | ||
* Um in Mehrfamilienhäusern auch den richtigen Briefkasten zu erwischen, benötigt er noch den Familiennamen (Byte-Nummer). | * Um in Mehrfamilienhäusern auch den richtigen Briefkasten zu erwischen, benötigt er noch den Familiennamen (Byte-Nummer). | ||
=Cache-Organisation= | ==Cache-Organisation== | ||
* Der direkt abgebildete (direct mapped) Cache im Bild unten ist die einfachste Form. | * Der direkt abgebildete (direct mapped) Cache im Bild unten ist die einfachste Form. | ||
* Jedem Set ist nur ein Cache-Eintrag zugeordnet. | * Jedem Set ist nur ein Cache-Eintrag zugeordnet. | ||
* Dadurch deckt man im Arbeitsspeicher einen Block von x+n Sets ab. | * Dadurch deckt man im Arbeitsspeicher einen Block von x+n Sets ab. | ||
[[Datei:DiagrammHardwareCPU10.png| | [[Datei:DiagrammHardwareCPU10.png|mini]] | ||
'''Bild 7''' | |||
'''Assoziativspeicher: Der teilassoziative Mehrweg-Cache beinhaltet im Prinzip mehrere Direct Mapped Caches plus Statistik- | '''Assoziativspeicher:''' Der teilassoziative Mehrweg-Cache beinhaltet im Prinzip mehrere Direct Mapped Caches plus Statistik-Bit (LRU). | ||
Der Briefträger hat dieses Problem ebenfalls | === Der Briefträger hat dieses Problem ebenfalls === | ||
* Wenn er einen Abstecher in eine Seitenstraße macht, muss er den nach Straßen vorsortierten Briefstapel zurücklegen und den für die Seitenstraße herausholen. | * Wenn er einen Abstecher in eine Seitenstraße macht, muss er den nach Straßen vorsortierten Briefstapel zurücklegen und den für die Seitenstraße herausholen. | ||
* Die Lösung des Problems sind teilassoziative Mehrweg-Caches. | * Die Lösung des Problems sind teilassoziative Mehrweg-Caches. | ||
* Auch dieser Cache-Typ speichert nur einen Teil der Adresse im Tag ab. | * Auch dieser Cache-Typ speichert nur einen Teil der Adresse im Tag ab. | ||
* Taucht ein Tag aber nochmals auf, erfolgt kein Komplettaustausch des Speicherblocks. | * Taucht ein Tag aber nochmals auf, erfolgt kein Komplettaustausch des Speicherblocks. | ||
* Die Hardware merkt sich den Eintrag wieder in der gleichen Set-Zeile. | ** Die Hardware merkt sich den Eintrag wieder in der gleichen Set-Zeile. | ||
* Allerdings erfolgt die Speicherung in einer weiteren Ebene (Weg), sodass die erste Zeile nicht überschrieben werden muss. | ** Allerdings erfolgt die Speicherung in einer weiteren Ebene (Weg), sodass die erste Zeile nicht überschrieben werden muss. | ||
* Die | ** Die Ebenen- oder Wegauswahl erfolgt über den Set-Adressteil. | ||
=== Mit einer Mehrwegsortierung arbeitet auch der Briefträger schneller === | |||
* Er hat sich die Post nicht nur in Straßenzüge (Tag) unterteilt, sondern nochmals mit einem Gummiband hinsichtlich der Straßenseite gebündelt (Set-Weg). | |||
* Bei einem Abstecher in die Seitenstrasse greift er sich nur das Briefbündel für eine Straßenseite. | |||
* Er hat sich die Post nicht nur in Straßenzüge (Tag) unterteilt, sondern nochmals mit einem Gummiband hinsichtlich der Straßenseite gebündelt (Set-Weg). | * Dafür legt er nur eines der zwei Bündel der alten Straße weg - und zwar das von der anderen Straßenseite. | ||
* Bei einem Abstecher in die Seitenstrasse greift er sich nur das Briefbündel für eine Straßenseite. | |||
* Dafür legt er nur eines der zwei Bündel der alten Straße weg - und zwar das von der anderen Straßenseite. | |||
* Wenn er aus der Seitenstrasse zurückkommt, hat er immer noch das Bündel der Seite in der Hand, bei der er abgebogen ist. | * Wenn er aus der Seitenstrasse zurückkommt, hat er immer noch das Bündel der Seite in der Hand, bei der er abgebogen ist. | ||
* Ein Mehrweg-Cache ist ein vervielfachter Direct Mapped Cache. | * Ein Mehrweg-Cache ist ein vervielfachter Direct Mapped Cache. | ||
* Der Schaltungsaufwand für einen teilassoziativen 2-Wege-Cache ist demnach doppelt so hoch wie bei der einfachen Version. | ** Der Schaltungsaufwand für einen teilassoziativen 2-Wege-Cache ist demnach doppelt so hoch wie bei der einfachen Version. | ||
* Bei einem 4-Wege-Cache vervierfacht er sich. | ** Bei einem 4-Wege-Cache vervierfacht er sich. | ||
* Irgendwann sind jedoch auch die Ebenen eines Mehrweg-Caches voll. | ** Irgendwann sind jedoch auch die Ebenen eines Mehrweg-Caches voll. | ||
* Mittels zusätzlich gespeicherter LRU- | ** Mittels zusätzlich gespeicherter LRU-Bit kann der Cache dann feststellen, welcher Eintrag in welcher Ebene am längsten nicht mehr benutzt wurde. | ||
* Dieser Wegeintrag wird dann überschrieben. | ** Dieser Wegeintrag wird dann überschrieben. | ||
=Pipeline-Verfahren= | ==Pipeline-Verfahren== | ||
* Bis jetzt sind wir davon ausgegangen, dass die CPU die Befehle nach dem klassischen Von-Neumann-Prinzip nacheinander verarbeitet. | * Bis jetzt sind wir davon ausgegangen, dass die CPU die Befehle nach dem klassischen Von-Neumann-Prinzip nacheinander verarbeitet. | ||
* Jeder Befehl wird innerhalb einer bestimmten Zeit (Taktzyklus) erledigt, dann ist der Nächste dran. | * Jeder Befehl wird innerhalb einer bestimmten Zeit (Taktzyklus) erledigt, dann ist der Nächste dran. | ||
* Wenn man der BIU erlaubt, schon Befehle aus dem Speicher zu holen während die CU gerade einen analysiert, hat man zwei Arbeitsschritte parallelisiert. | * Wenn man der BIU erlaubt, schon Befehle aus dem Speicher zu holen während die CU gerade einen analysiert, hat man zwei Arbeitsschritte parallelisiert. | ||
* Es sind also zwei Befehle gleichzeitig in Teilbearbeitung. Überträgt man das Prinzip auf alle beteiligten Funktionseinheiten, erhöht sich die Zahl der Teilbearbeitungen weiter. | * Es sind also zwei Befehle gleichzeitig in Teilbearbeitung. Überträgt man das Prinzip auf alle beteiligten Funktionseinheiten, erhöht sich die Zahl der Teilbearbeitungen weiter. | ||
* Dieses Pipeline-Prinzip verarbeitet aber die eingehenden Befehle und Daten immer noch Schritt für Schritt. | * Dieses Pipeline-Prinzip verarbeitet aber die eingehenden Befehle und Daten immer noch Schritt für Schritt. | ||
[[Datei:DiagrammHardwareCPU11.png| | [[Datei:DiagrammHardwareCPU11.png|mini]] | ||
'''Bild 8''' | |||
'''Pipeline in Funktion: Mit der Pipelining-Technik lässt sich die Befehlsausführung beschleunigen. | '''Pipeline in Funktion:''' Mit der Pipelining-Technik lässt sich die Befehlsausführung beschleunigen. | ||
=Superskalare Architektur= | ==Superskalare Architektur== | ||
* Wenn schon eine Pipeline die Geschwindigkeit erhöht, geht es mit Zweien noch schneller. | * Wenn schon eine Pipeline die Geschwindigkeit erhöht, geht es mit Zweien noch schneller. | ||
* In Bild 9 "Parallel ist schneller" ist im oberen Teil ein solcher Ansatz zu sehen. | * In Bild 9 "Parallel ist schneller" ist im oberen Teil ein solcher Ansatz zu sehen. | ||
* Auf diese Weise arbeitet beispielsweise der Intel Pentium. | * Auf diese Weise arbeitet beispielsweise der Intel Pentium. | ||
* Um unnötige Probleme mit Abhängigkeiten zwischen den Befehlen zu minimieren, arbeitet die Intel-CPU allerdings nur bei Kommandos gleichzeitig mit beiden Pipelines, die gut zueinander passen. | * Um unnötige Probleme mit Abhängigkeiten zwischen den Befehlen zu minimieren, arbeitet die Intel-CPU allerdings nur bei Kommandos gleichzeitig mit beiden Pipelines, die gut zueinander passen. | ||
[[Datei: | [[Datei:Diagram009.jpg|mini]] | ||
'''Bild 9''' | |||
'''Parallel ist schneller: Superskalare Architekturen mit einer doppelten Pipeline | '''Parallel ist schneller:''' Superskalare Architekturen mit einer doppelten Pipeline oben und parallel arbeitenden Ausführungseinheiten unten. | ||
=Sprungvorhersage= | ==Sprungvorhersage== | ||
* Die Abhängigkeiten der Befehle untereinander sowie Sprungbefehle machen den Pipelines und superskalaren Architekturen zu schaffen. | * Die Abhängigkeiten der Befehle untereinander sowie Sprungbefehle machen den Pipelines und superskalaren Architekturen zu schaffen. | ||
* Je mehr parallel vorweggreifend erledigt wird, desto mehr Arbeit ist beispielsweise bei einem Sprungbefehl in ein anderes Programmsegment nachzuholen. | * Je mehr parallel vorweggreifend erledigt wird, desto mehr Arbeit ist beispielsweise bei einem Sprungbefehl in ein anderes Programmsegment nachzuholen. | ||
* Die ALUs müssen dann warten, bis sich die neuen Befehle durch die lange Pipeline gequält haben. | * Die ALUs müssen dann warten, bis sich die neuen Befehle durch die lange Pipeline gequält haben. | ||
=Dynamische Sprungvorhersage= | ==Dynamische Sprungvorhersage== | ||
Die Sprungvorhersage kann auf einfachen Regeln basieren: | Die Sprungvorhersage kann auf einfachen Regeln basieren: | ||
* Beispielsweise ist es bei einem Sprungbefehl gegen den Befehlsstrom sehr wahrscheinlich, dass er mehrheitlich tatsächlich ausgeführt wird. | * Beispielsweise ist es bei einem Sprungbefehl gegen den Befehlsstrom sehr wahrscheinlich, dass er mehrheitlich tatsächlich ausgeführt wird. | ||
* Diese Annahme basiert auf der Feststellung, dass Rückwärtssprünge im Programmcode oft am Ende von Schleifen stehen. | * Diese Annahme basiert auf der Feststellung, dass Rückwärtssprünge im Programmcode oft am Ende von Schleifen stehen. | ||
* Und Programmschleifen werden in der Regel mehr als nur einmal durchlaufen. | * Und Programmschleifen werden in der Regel mehr als nur einmal durchlaufen. | ||
* Bei Vorwärtssprüngen ist eine derart einfache Vorhersage kaum noch zu treffen. | * Bei Vorwärtssprüngen ist eine derart einfache Vorhersage kaum noch zu treffen. | ||
* Hier kann man nur von der statistischen Erkenntnis ausgehen, dass die meisten bedingten Vorwärtssprünge nicht ausgeführt werden. | * Hier kann man nur von der statistischen Erkenntnis ausgehen, dass die meisten bedingten Vorwärtssprünge nicht ausgeführt werden. | ||
<noinclude> | |||
== Anhang == | |||
=== Siehe auch === | |||
{{Special:PrefixIndex/{{BASEPAGENAME}}}} | |||
==== Links ==== | |||
===== Weblinks ===== | |||
==Links== | |||
===extern=== | |||
#https://de.wikipedia.org/wiki/Barrel-Shifter | |||
[[ | [[Kategorie:CPU]] | ||
</noinclude> |
Aktuelle Version vom 19. Oktober 2024, 13:40 Uhr
topic - Beschreibung
Beschreibung
Funktion
Mikroprozessoren sind hochkomplexe Maschinen. Sie basieren jedoch auf einem einfachen Grundprinzip. Wer es kennt, versteht auch die Funktionsweise der modernen CPUs.
History
- Die Von-Neumann-Architektur besteht aus vier Funktionseinheiten, die in Bild 1 zu sehen sind: Rechenwerk, Steuerwerk, Speicher (Memory) und Ein-/Ausgabeeinheit (I/O-Unit).
- Dazu kommen noch die Verbindungen zwischen den Funktionsblöcken - das Bussystem.
- Die beiden wichtigsten Einheiten Rechenwerk und Steuerwerk sind im Prozessor vereint.
- Die CPU als Ganzes übernimmt innerhalb des Von-Neumann-Rechners die Ausführung von Befehlen und die notwendige Ablaufsteuerung.
Von-Neumann-Rechner: Er beinhaltete schon vor 50 Jahren die wesentlichen Bestandteile heutiger PCs.
Von-Neumann-Rechner
- Die Anpassung für jedes zu lösende Problem erfolgt mit im Speicher abgelegten Programmen.
- Diese Software beinhaltet die Informationen zur Steuerung des Rechners.
- Jede Speicherzelle ist mit einer festen Adresse eindeutig identifizierbar.
- In ihrer ursprünglichen Form verarbeitet sie mit nur einem Prozessor Schritt für Schritt Befehle und Daten, die aus dem Speicher stammen.
- Obwohl Befehle und Daten aus dem gleichen Speicher kommen, gibt es nur eine Busverbindung für Beides dorthin.
- So wurde eine hierarchisch gegliederte Speicherstruktur mit Registern und verschiedenen Cache-Ebenen eingeführt.
- Die sequenzielle Befehlsausführung wird in der CPU nach Kräften parallelisiert.
- Dazu stehen mehrere Funktionseinheiten und Ausführungsebenen bereit.
Erweiterte Architektur
- Der Von-Neumann-Rechner holt alle Befehle und Daten direkt aus dem Speicher. Für die heutigen CPUs wäre das viel zu langsam.
- Diese CPU orientiert sich hinsichtlich ihrer Arbeitsweise stark an den x86-Prozessor der PCs.
- Deshalb besitzt sie einen zusätzlichen Registersatz, der den Zugriff auf Befehle und Daten ohne Wartezyklen ermöglicht.
- Es handelt sich um Mehrzweckregister für Befehle und Daten.
- Das Adresswerk ist für die Berechnung der effektiven Adresse zuständig.
- Zusätzlich entkoppelt der L1-Cache den Prozessorkern vom langsamen externen Speicher.
Bild 2
Beispiel-Prozessor: Die erweiterte CPU hat schon alles, was einen einfachen Mikroprozessor ausmacht.
Grundsätzliche Programmablauf im Prozessor
Holphase (Fetch)
Zunächst muss ein Befehl aus dem Speicher geladen werden. Wenn sich die gesuchte Information noch nicht im L1-Cache befindet, muss die Busschnittstelle dafür den Speicher ansprechen.
Dekodierphase (Decode)
Das Steuerwerk untersucht den Befehl hinsichtlich der vorzunehmenden Arbeitsschritte. Es entscheidet, welche Operation (Addition, Subtraktion, logische Verknüpfung und so weiter) die ALU auszuführen hat.
Ausführungsphase (Execute)
Die ALU wird vom Steuerwerk nun angewiesen, die gewünschte Operation mit den geladenen Daten auszuführen
Schreibphase (Write Back)
Das Ergebnis der Operation landet in einem der Register oder im Speicher. Um langwierige Zugriffe auf das externe RAM zu vermeiden, sammelt die CPU die Daten eventuell im L1-Cache, damit sie später in einem schnellen Blockschreibvorgang übertragen werden können.
Steuereinheit (CU)
- Die CU ist die Kommandozentrale der CPU.
- Sie steuert alle Abläufe im Inneren des Prozessors sowie seine Kommunikation nach außen.
- Die CU holt sich einen Befehl aus dem Arbeitsspeicher/Cache und speichert ihn in einem Register zwischen.
- Damit ist der CPU-Bus frei für weitere Aktionen.
- Im Befehlsdecoder untersucht die CU die einzelnen Bit des Kommandos dann genauer.
- Aus einem Teil der Information ergibt sich der weitere logische und zeitliche Ablauf bei der Befehlsausführung.
- Handelt es sich um einen fest implementierten Befehl, werden sofort die entsprechenden Schritte in der Ablaufsteuerung eingeleitet.
- Sind alle zur Steuerung notwendigen Informationen gesammelt, beginnt die Ablaufsteuerung damit, das System zu koordinieren.
- Dazu gehört auch die Steuerung der BIU, um die Operanden für die Rechenbefehle in die Register zu laden.
Bild 3
Control Unit: Die CU steuert alle Abläufe im Innern des Prozessors sowie seine Kommunikation nach außen.
Rechenwerk (ALU)
- Die ALU ist in der CPU für die Rechenarbeit zuständig.
- Alle aktuellen PC-Prozessoren besitzen neben einem oder mehreren dieser Rechenwerke für Ganzzahlen auch solche für Fließkommaarithmetik.
- Das Bild zeigt den Datenweg unserer Beispiel-CPU.
- Die CU steuert die ALU, die auf Anweisung die beiden Operanden aus dem Registersatz holt, mit denen sie rechnen soll.
- Sie werden zunächst in den beiden Hilfsregistern zwischengepuffert, damit sie während der gesamten Rechenoperation stabil anliegen.
- Im nächsten Schritt führt die ALU die von der CU geforderte Rechenoperation aus.
- Das Resultat wird schließlich im Ergebnisregister zwischengepuffert, damit sich die ALU sofort der nächsten Aufgabe zuwenden kann.
Bild 4
Arithmetical and Logical Unit: Die ALU und ihr Datenweg. Die Hilfsregister für die Operanden und Ergebnisse gehören zu diesem Funktionsblock.
Adresseinheit (AU) & Busschnittstelle (BIU)
- Der Aufbau der AU mit einem zentralen Addierer in Bild 5 ähnelt dem der ALU.
- Tatsächlich wurde die Adressberechnung bei den ersten Prozessoren auch noch in dieser erledigt.
- Die spezialisierte AU erledigt das jedoch schneller und vor allem parallel zur ALU.
- Der Decoder ist im einfachsten Fall als Linksschieberegister realisiert.
- Dieser Barrel Shifter[[1]] extrahiert die Adressinformation aus dem Befehl durch Verschieben des Befehlscodes um n Bit in nur einem Taktzyklus.
- Die extrahierte Grundadresse gelangt dann in Hilfsregister A, wo Sie stabil anliegt bis der Addierer seine Arbeit beendet hat.
- Hilfsregister B beinhaltet den Inhalt des Programmzählers oder den des BIU-Adresspuffers.
- Die komplexere MMU (Memory management unit) realer PC-Prozessoren kann darüber hinaus virtuelle Adressen verwalten.
- Das Betriebssystem lagert hierbei den Speicher blockweise auf die Festplatte aus.
- Greift die CPU auf den ausgelagerten Speicher zu, verursacht das einen Seitenfehler, der die MMU (Memory management unit) zum Handeln veranlasst.
- Das Betriebssystem blendet dann den gewünschten Speicherbereich in das RAM des PCs ein und lagert einen gerade nicht benötigten dafür aus.
- Den virtuellen Speicher kann die CPU dank MMU (Memory management unit) so ansprechen, als wäre er real existierendes RAM.
Bild 5
Address Unit: Die AU sorgt für die Berechnung der Adresse. In modernen CPUs verseht eine leistungsfähigere MMU (Memory management unit) diesen Dienst.
Busschnittstelle (BIU)
- Die Busschnittstelle verbindet die internen Busse des Prozessors mit der Außenwelt.
- Sie enthält Puffer zur Zwischenspeicherung von Adressen, Daten und Steuersignalen.
- Die CPU arbeitet intern mit einer möglichst niedrigen Spannung, damit die Erwärmung bei hohen Taktfrequenzen in erträglichen Grenzen bleibt.
- Die BIU sorgt deshalb auch für eine Pegelanpassung zwischen dem CPU-Kern und dem externen Bussystem.
Cache-Grundlagen
- Cache sitzt in der CPU zwischen den extrem schnellen Funktionseinheiten und dem langsamen Arbeitsspeicher der L1-Cache.
- Aus Platzgründen kann der L1-Cache in der CPU nicht besonders groß sein.
- Er bewegt sich in der Regel in Größenordnungen von 16 bis 64 KByte.
- Die Kunst besteht also darin, den schnellen kleinen Speicher so mit dem langsamen großen Arbeitsspeicher zu kombinieren, dass sich eine möglichst schnelle Gesamtlösung ergibt.
- Bild 6 zeigt die Auswertung einer 32-Bit-Adresse nach diesem Prinzip.
Bild 6
Cache Interna: Der prinzipielle Aufbau eines Caches (oben) sowie die Adressauswertung im Cache-Controller (unten).
Briefträger bei der Arbeit
- Er trägt in einer Stadt (Arbeitsspeicher) die Post (Daten) aus.
- Dafür sortiert er die Post in seiner Tasche nach Straßen (Tag).
- In einer Straße holt er sich die hierfür bestimmte Post heraus und verteilt sie an die Häuser (Set-Zeile).
- Um in Mehrfamilienhäusern auch den richtigen Briefkasten zu erwischen, benötigt er noch den Familiennamen (Byte-Nummer).
Cache-Organisation
- Der direkt abgebildete (direct mapped) Cache im Bild unten ist die einfachste Form.
- Jedem Set ist nur ein Cache-Eintrag zugeordnet.
- Dadurch deckt man im Arbeitsspeicher einen Block von x+n Sets ab.
Bild 7
Assoziativspeicher: Der teilassoziative Mehrweg-Cache beinhaltet im Prinzip mehrere Direct Mapped Caches plus Statistik-Bit (LRU).
Der Briefträger hat dieses Problem ebenfalls
- Wenn er einen Abstecher in eine Seitenstraße macht, muss er den nach Straßen vorsortierten Briefstapel zurücklegen und den für die Seitenstraße herausholen.
- Die Lösung des Problems sind teilassoziative Mehrweg-Caches.
- Auch dieser Cache-Typ speichert nur einen Teil der Adresse im Tag ab.
- Taucht ein Tag aber nochmals auf, erfolgt kein Komplettaustausch des Speicherblocks.
- Die Hardware merkt sich den Eintrag wieder in der gleichen Set-Zeile.
- Allerdings erfolgt die Speicherung in einer weiteren Ebene (Weg), sodass die erste Zeile nicht überschrieben werden muss.
- Die Ebenen- oder Wegauswahl erfolgt über den Set-Adressteil.
Mit einer Mehrwegsortierung arbeitet auch der Briefträger schneller
- Er hat sich die Post nicht nur in Straßenzüge (Tag) unterteilt, sondern nochmals mit einem Gummiband hinsichtlich der Straßenseite gebündelt (Set-Weg).
- Bei einem Abstecher in die Seitenstrasse greift er sich nur das Briefbündel für eine Straßenseite.
- Dafür legt er nur eines der zwei Bündel der alten Straße weg - und zwar das von der anderen Straßenseite.
- Wenn er aus der Seitenstrasse zurückkommt, hat er immer noch das Bündel der Seite in der Hand, bei der er abgebogen ist.
- Ein Mehrweg-Cache ist ein vervielfachter Direct Mapped Cache.
- Der Schaltungsaufwand für einen teilassoziativen 2-Wege-Cache ist demnach doppelt so hoch wie bei der einfachen Version.
- Bei einem 4-Wege-Cache vervierfacht er sich.
- Irgendwann sind jedoch auch die Ebenen eines Mehrweg-Caches voll.
- Mittels zusätzlich gespeicherter LRU-Bit kann der Cache dann feststellen, welcher Eintrag in welcher Ebene am längsten nicht mehr benutzt wurde.
- Dieser Wegeintrag wird dann überschrieben.
Pipeline-Verfahren
- Bis jetzt sind wir davon ausgegangen, dass die CPU die Befehle nach dem klassischen Von-Neumann-Prinzip nacheinander verarbeitet.
- Jeder Befehl wird innerhalb einer bestimmten Zeit (Taktzyklus) erledigt, dann ist der Nächste dran.
- Wenn man der BIU erlaubt, schon Befehle aus dem Speicher zu holen während die CU gerade einen analysiert, hat man zwei Arbeitsschritte parallelisiert.
- Es sind also zwei Befehle gleichzeitig in Teilbearbeitung. Überträgt man das Prinzip auf alle beteiligten Funktionseinheiten, erhöht sich die Zahl der Teilbearbeitungen weiter.
- Dieses Pipeline-Prinzip verarbeitet aber die eingehenden Befehle und Daten immer noch Schritt für Schritt.
Bild 8
Pipeline in Funktion: Mit der Pipelining-Technik lässt sich die Befehlsausführung beschleunigen.
Superskalare Architektur
- Wenn schon eine Pipeline die Geschwindigkeit erhöht, geht es mit Zweien noch schneller.
- In Bild 9 "Parallel ist schneller" ist im oberen Teil ein solcher Ansatz zu sehen.
- Auf diese Weise arbeitet beispielsweise der Intel Pentium.
- Um unnötige Probleme mit Abhängigkeiten zwischen den Befehlen zu minimieren, arbeitet die Intel-CPU allerdings nur bei Kommandos gleichzeitig mit beiden Pipelines, die gut zueinander passen.
Bild 9
Parallel ist schneller: Superskalare Architekturen mit einer doppelten Pipeline oben und parallel arbeitenden Ausführungseinheiten unten.
Sprungvorhersage
- Die Abhängigkeiten der Befehle untereinander sowie Sprungbefehle machen den Pipelines und superskalaren Architekturen zu schaffen.
- Je mehr parallel vorweggreifend erledigt wird, desto mehr Arbeit ist beispielsweise bei einem Sprungbefehl in ein anderes Programmsegment nachzuholen.
- Die ALUs müssen dann warten, bis sich die neuen Befehle durch die lange Pipeline gequält haben.
Dynamische Sprungvorhersage
Die Sprungvorhersage kann auf einfachen Regeln basieren:
- Beispielsweise ist es bei einem Sprungbefehl gegen den Befehlsstrom sehr wahrscheinlich, dass er mehrheitlich tatsächlich ausgeführt wird.
- Diese Annahme basiert auf der Feststellung, dass Rückwärtssprünge im Programmcode oft am Ende von Schleifen stehen.
- Und Programmschleifen werden in der Regel mehr als nur einmal durchlaufen.
- Bei Vorwärtssprüngen ist eine derart einfache Vorhersage kaum noch zu treffen.
- Hier kann man nur von der statistischen Erkenntnis ausgehen, dass die meisten bedingten Vorwärtssprünge nicht ausgeführt werden.