FPU

Floating Point Unit (Gleitkommaeinheit). Es handelt sich um eine CPU, die zur Bearbeitung von Gleitkommazahlen dient. Die FPU arbeitet in der Regel mit der CPU als Ko-Prozessor zusammen. Sie ist meist in die Prozessor-Architektur als eigener Chip  eingebunden, kann aber auch in einem eigenen Gehäuse sitzen. 

Die FPU unterstützt oft als Ko-Prozessor die CPU in Gleitkommaberechnungen. FPUs (oder NPU - Numeric Processing Unit) sind Gleitkommaeinheiten mit mathematischen Funktionen  wie exakte Grundrechenarten sowie algebraische Rechenarten (Wurzel, Logarithmus, Potenz, Trigonometrie) und Matrizen-Rechnen.  FPUs sind auch oft bei CISC-CPUs als Ko-Prozessoren im Einsatz.  Das Benchmarking von FPUs erfolgt z.B. über SPECfp (Standard Performance Evaluation Corporation). 

FPUs arbeiten mit breiten Registern (64-Bit, 80-Bit oder 128-Bit bei 32- oder 64-Bit Hauptprozessoren) und Hardware-Optimierungen für bestimmte Berechnungen wie der CORDIC-Algorithmus (Coordinate Rotation Digital Computer).  Auch Lookup-Tabellen gehören zum Leistungsrepertoire von FPUs.                                           
Siehe auch:    Gleitkommazahl   CPU-Architektur   CISC   RISC   Cell   PowerPC   IBM   Intel   AMD   CPU

  Simultaneous-Multithreading

Beim Simultaneous Multithreading (SMT) werden mit Hilfe von mehreren Pipelines und zusätzlicher Registersätze mehrere Threads durch einen Prozessor gleichzeitig ausgeführt. Intels Hyper-Threading-Architektur basiert auf diesem Prinzip.  SMT funktioniert nur, wenn vom Compiler, dem Betriebssystem oder dem Programmierer vorgesehen ist, dass mehrere Threads parallel ausgeführt werden. Das Simultaneous Multithreading ist also zwischen Pipeline-Architektur und Multicore-Architektur  positioniert. Im Gegensatz zur Pipeline-Architektur sind mehrere Threads gleichzeitig ausführbar. Es werden ALU (Arithmetic Logic Unit), FPU (Floating Point Unit), Befehlscodierung und Registersatz zu logischen Einheiten verdoppelt.  Die logischen SMT-Prozessoren werden vom System wie mehrere unabhängige Prozessoren wahrgenommen. Im Gegensatz zur  Mehrkern-Technologie sind SMT-Prozessoren jedoch nicht wirklich unabhängig.  SMT ist eine Ausprägung des hardwareseitigen Multithreading.                                               
Siehe auch:    Multithreading   Hyper-Threading   SMP   ALU   Superskalar   Thread   Register   Intel-Core   Mehrkernprozessor   Paralleler-Server

  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