Funktionelle Einheiten, Vektorinstruktionen und Mehrkernprozessoren

Da wir alle drei Konzepte heute in den Intelprozessoren und auch einigen AMD-Typen finden, mal eine historische Betrachtung was die Unterschiede sind und was wo nützt. Das älteste sind mehrere funktionelle Einheiten. Dazu hole ich erst mal aus und erkläre wie eine CPU allgemein aufgebaut ist. Man kann sie selbst bei einfachen Exemplaren, also z.B. einem 8-Bit Mikroprozessor in mehrere Untereinheiten zerlegen die jeweils eine Aufgabe haben. Da ist zum einen der Befehlsdekoder. Er stellt fest welcher Befehl hinter dem Bitmuster steckt, das gerade geladen wird und welche Register er nutzt. Die Daten selbst bekommt er von einer Einheit die mit dem Speicher kommuniziert, je nach Architektur Load/Store Einheit, Bus-Interface etc. genannt. Dann gibt es noch mindestens eine Ausführungseinheit welche die Befehle auch durchführt, bei einfachen Prozessoren meistens als Arithmetisch-logische Einheit (ALU) bezeichnet. Das ist nur die Grundmenge. Es können durchaus mehrere dieser Einheiten sein.

Schon bald kam man drauf diese Einheiten zumindest zeitweise parallel arbeiten zu lassen. Ein Befehl wird z.B. erst von der Load/Store Einheit aus dem Speicher geholt, durchläuft dann den Befehlsdekoder und dann die Ausführungseinheit. Schon bei der 8086 CPU war die Bus-Interface Unit schon fähig während Decoder und ALU arbeiteten die nächsten Bytes vorrausschauend aus dem Speicher zu laden, das nennt man übrigens Prefetch. Der rapide Geschwindigkeitseinbruch der 8088 CPU kam dadurch zustande, dass neben den Befehlen auch noch Daten von dieser Einheit geholt und geschrieben wurden und durch die halbierte Busbreite kam sie kaum noch dazu den Prefetch durchzuführen, da jeder Transfer nun doppelt so lange dauerte. Auch bei der IBM 7030 Stretch gab es schon Parallelität von Laden/Speichern und ausführen/Dekodieren. Continue reading „Funktionelle Einheiten, Vektorinstruktionen und Mehrkernprozessoren“