| Superskalar | |||||
|
Ein superskalarer Prozessor verfügt über mehrere Funktionseinheiten pro Befehl. Damit können voneinander unabhängige Befehle parallel bearbeitet werden. Superskalarität wird durch das Pipeline-Konzept verwirklicht. Unter Pipelining versteht man die Fähigkeit von Prozessoren, Maschinenbefehle bei der Verarbeitung in mehrere Teile zu zerlegen, und im selben Takt zu verarbeiten. Da die Teilaufgaben parallel bearbeitet werden, kann die Taktfrequenz des Prozessors gesteigert werden. Da ein Befehl jedoch mehrere Takte beim Pipelining benötigen kann, muss die Taktrate, um den Effekt nicht zu vernichten, um denselben Faktor gesteigert werden, der die Anzahl der Teilaufgaben bestimmt, in die ein Befehl zerlegt wird. Jedoch wird der Datendurchsatz gesteigert, da immer mehrere Teilaufgaben verschiedener Befehle gleichzeitig in Bearbeitung sind, und bei gleichen Abarbeitungszeiten pro Teilbefehl, jeweils versetzt um eine Teilaufgabenstufe, diese Teilaufgaben bei Ausführung eines Befehls ausgeführt werden können, so dass - vergleichbar mit einer Fliessbandfertigung - in jedem Takt ein Befehl vollendet wird. Der Prozessor nimmt eine dynamische Zuteilung von Befehlen vor. Er nutzt die Möglichkeit, die Teilaufgaben parallel zu bearbeiten. Dies geschieht noch vor der Stufe, an der z. B. der Compiler ansetzt. Durch Superskalarität kann die Anzahl der ausgeführten Befehle pro Takt (Instructions per Cycle, IPC) erhöht werden. |
|||||
| Siehe auch: Parallele-Datenverarbeitung Multithreading Hyper-Threading Simultaneous-Multithreading CPU Dual-Core Core-2-Duo Ultra-Large-Scale-Integration Supercomputer TeraFLOPS | |||||
| Hyper-Threading | |||||
|
Hyper-Threading wurde von Intel entwickelt. Die Abarbeitung von Multithreaded Anwendungen werden optimiert indem die Ressourcen der CPU besser ausgenutzt werden. Die Threads werden auf 2 logische Prozessoren aufgeteilt und vom Betriebssystem mit Hilfe von (S)MP-Verfahren (Symmetrisches Multiprozessorsystem) abgearbeitet. Hintergrund für die Einführung der Hyper-Threading-Technology Verschiedene Möglichkeiten die Performance des Prozessors zu erhöhen wurden ausprobiert: Steigerung der Taktzyklen, Prefetching oder erweiterte L1- bzw. L2- oder L3-Caches. Jedoch ergaben sich daraus einige Probleme: die mögliche Leistungssteigerung durch schnellere Taktzyklen erfolgt nicht linear zur Taktzahl sondern unterproportional und bedingt auch einen höheren Stromverbrauch und Abwärme. Die Abwärmeproblematik bewog Intel dann auch zur Aufgabe der NetBurst-Architektur. Die 20 Pipeline-Stufen des Pentium 4 bewirken zudem eine wachsende Anzahl von Cache Misses (Cache Hit: Daten sind bei der Anfrage im Cache vorhanden, Cache Miss: Daten sind bei der Anfrage nicht im Cache vorhanden) sowie Interrupts und fehlerhafte Sprung-Voraussagen. Eine Vergrösserung der Caches ist nicht wirklich effizient: neben Kostensteigerungen in der Produktion wachsen mit grösseren L1- oder L2-Caches die Anforderungen zur Aufrechterhaltung höherer Taktzyklen oder geringerer Antwortzeiten. Es wurde versucht, die Anzahl der Instruktionen pro Taktzyklus durch Instruction-Level-Parallelism (ILP) zu erhöhen. Massnahmen dazu waren: Instruction Pipelining, Superskalarität, Out-of-Order-Execution, Registerumbenennung, Sprungvorhersagen und Speculative Execution. Die parallele Ausführung mehrerer Threads wird durch replizierte Ressourcen bei modernen Prozessoren unterstützt, ist jedoch nicht immer sehr effektiv. Die Strategie der Out-of-Order Execution beispielsweise ermöglicht bei superskalaren Prozessoren zwar Befehle ausserhalb der seriellen Reihenfolge auszuführen und damit die Pipelines besser auszulasten, bedingt jedoch, dass immer genügend Befehle zur Verfügung stehen, um die Prozessor-Ressourcen optimal auszulasten. Die Tendenz, Errungenschaften aus dem Serverbereich auf den Desktopbereich zu übertragen trägt auch beim Hyper-Threading Rechnung: im Serverbereich wird schon länger mit zwei vollständigen Prozessoren (2-Prozessor-Systeme) gearbeitet, die in der Lage sind, 2 Threads parallel abzuarbeiten. Hyper-Threading-Technologie Hyper-Threading wurde bei den Intel Prozessoren mit NetBurst Architektur eingeführt und ist eine Variante des hardwareseitigen Multithreading. Die Hyper-Threading-Technology (HTT) funktioniert nur bei Multithreaded-Prozessoren (Mehrfädige Prozessoren). Dazu besitzt der Prozessorkern mehrere Registersätze und Programmzähler. Aus einem physischen Prozessor werden 2 logische Prozessoren, die sich als solche auch beim Betriebssystem ausgeben. Beim Intel Pentium 4 Prozessor mit Northwood Kern wurden Hyper-Threading Ressourcen aktiviert (die auch schon beim Willamette-Kern vorhanden waren). Dabei handelt es sich um einen Trace Cache Next IP, Instruction Streaming Buffers, ein Return Stack Predictor, Register Alias Tables, einen Next Instruction Pointer, ein Instruction TLB (Translation Lookaside Buffer) sowie Trace Cache Fill Buffers. Zudem verfügt jeder virtuelle Prozessorkern über einen eigenen Interrupt Controller (Advanced Programmable Interrupt Controller). Der Trace Cache, die L1- und L2-Caches sowie die Instruction Queues, Memory Operation Queues und der Key Buffer werden aufgeteilt (Ressourcen-Sharing). Ein Prozessorkern ist damit in der Lage, Threads simultan zu verarbeiten. Threads werden in mehrere Teilaufgaben zerlegt und durch parallel arbeitende Pipeline-Stufen abgearbeitet. Dazu sind mehrere Registersätze und ein angepasstes Steuerwerk vorhanden. Ein Thread besitzt dazu einen eigenen Registersatz mit Stackpointer und Programcounter. Damit Hyper-Threading funktioniert, sollte das Betriebssystem SMP-Architekturen unterstützen. Denn die CPU bzw. die Prozessorkerne sind beim Hyper-Threading softwaretechnisch ähnlich gesteuert wie ein SMP-System. Weiterhin sollte das Betriebssystem Multitasking-fähig sein und Kernel-Level-Threads unterstützen. Hyper-Threading Ressourcen werden unterteilt in: 1. Replicated Ressources: Replicated Ressources sind nachgebildete Ressourcen, bei denen die beiden virtuellen Prozessorkerne (Siblings - Geschwister) über einige der Ressourcen als eigene Kopie verfügen. Dazu gehören ein vollständiger Registersatz mit Stackpointer und Programcounter (Befehlszählregister, Befehlszähler, Programmzähler, Instruction Pointer). 2. Partitioned Ressources (unterteilte Ressourcen): die Ressourcen werden unter den Siblings aufgeteilt. Dazu gehören der Record Buffer, die Load/Store Buffer und die Instruction Queues. 3. Shared Ressources (geteilte Ressourcen): die Siblings müssen sich Ressourcen mit anderen Siblings aufteilen. Oftmals können sie nur von einem Sibling gleichzeitig verwendet werden. Dazu zählen u.a. die ALU und die FPUs (Floating Point Unit). Wenn das Betriebssystem die notwendigen Voraussetzungen erfüllt, können Standard-Anwendungen um bis zu 20% beschleunigt werden und entsprechend optimierte Anwendungen um bis zu 33%. Hyper-Threading Unterstützung durch Prozessoren und Betriebssysteme Zu den Prozessoren, welche Hyper-Threading unterstützen gehören: Pentium 4 (ab Northwood mit 3066 MHz, Prescott, Prescott 2M und Cedar Mill), Pentium Extreme Edition (Dual Core Prozessor Pentium D mit freigeschaltetem Hyper-Threading: Smithfield und Presler, Pentium EE) und die XEON 603/604. Bei AMD: Athlon 64 X2, Opteron Dual Core Prozessoren und der Phenom. Betriebssysteme, welche Hyper-Threading unterstützen, sind: Windows XP, Windows Vista, Windows Server 2003, FreeBSD und Linux ab Kernel-Version 2.4.17. Windows 2000 unterstützt zwar Hyper-Threading, kann es aber nicht effizient ausnutzen, da Windows 2000 nicht über eine Unterscheidung zwischen physikalischen und logischen Prozessoren verfügt. Compiler, welche Hyper-Threading-fähigen Code erzeugen sind: die Intel-Compiler und die GNU Compiler Collection (GCC). Voraussetzung ist jedoch, dass die Anwendungen parallelisierbar sind: die Abarbeitung eines Threads darf nicht abhängig sein vom Ergebnis eines anderen Threads. |
|||||
| Siehe auch: Multithreading Simultaneous-Multithreading NetBurst Mehrkernprozessor Pipeline-Architektur Superskalar Thread Register ALU SMP | |||||