Gleitkommaeinheit

aus Wikipedia, der freien Enzyklopädie
80287, FPU einer 80286 CPU mit 6 MHz.

Gleitkommaeinheit, FPU (für Floating Point Unit) oder NPU (für Numeric Processing Unit) sind Begriffe aus der Computertechnik und bezeichnen einen speziellen Prozessor, der Operationen auf Gleitkommazahlen ausführt. Da insbesondere bei älteren, Mikrocode-basierten Systemen neben vergleichsweise einfachen Operationen wie Addition, Subtraktion, Multiplikation, Division oder Wurzelziehen auch transzendente Funktionen wie die Exponentialfunktion oder diverse trigonometrische Funktionen in Hardware ausgeführt waren, spricht man auch von mathematischen Koprozessoren.

Allgemeines

Die FPU kann auch als externer Chip in einem eigenen Gehäuse sitzen (z. B. Intel 80287) oder in einen bestimmten Bereich innerhalb der CPU integriert sein (z. B. Intel Pentium).

Frühen CISC-Prozessoren fehlten meist Register und Befehle zur Behandlung von Gleitkommazahlen. Derlei Berechnungen und mathematische Funktionen wurden per Software-Bibliotheksaufrufe durch den auf Ganzzahlverarbeitung optimierten Hauptprozessor erledigt. Um die CPU von diesen rechenintensiven Aufgaben zu entlasten, gab es zunächst Arithmetik-Prozessoren wie den AMD AM9511, die als periphere Bausteine angesprochen wurden. Bei späteren CISC-CPUs wie den Intel x86-Prozessoren (bis zum 486er) oder den Motorola-68k-CPUs gab es die Möglichkeit, einen Koprozessor auf dem Motherboard nachzurüsten.

Eingeläutet wurde das Zeitalter der integrierten FPUs durch mehrere Faktoren:

  • In CPUs integrierte Caches sind unvereinbar mit externen FPUs. Intels letzte eigenständige Gleitkommaeinheit, der externe Coprozessor i487, war daher tatsächlich eine modifizierte vollständige 80486DX-CPU. Diese hatte im Gegensatz zum 80486SX eine Gleitkommaeinheit eingebaut. Die Modifikation des Coprozessors bestand in Form eines zusätzlichen Steuerpins und einer künstlichen Sperre, die den Eigenbetrieb verhinderte. Setzte man den Coprozessor ein, so wurde die SX-CPU deaktiviert.[1]
  • Mathematische Funktionen wurden zunehmend in „normalen“ Applikationen verwendet, z. B. im Rendern von Zeichensätzen.
  • Gatterfunktionen wurden zunehmend preiswerter, Sockel und Steckverbinder eher teurer.

Funktionsweise und Aufbau

[[Hilfe:Cache|Fehler beim Thumbnail-Erstellen]]:
Architektur der FPU i8087 beziehungsweise i80287.

Die Anwesenheit einer FPU ermöglicht eine erhebliche Leistungssteigerung für gleitkommaintensive Berechnungen. So boten Koprozessoren breitere Register: Schon bei 16- und 32-Bit-CPUs hatte die FPU häufig 64 Bit, 80 Bit oder auch 128 Bit breite Register. Dadurch konnten einfache Berechnungen mit höherer Genauigkeit durchgeführt werden, und es wurde ein größerer Wertebereich abgedeckt. Da auch die FPU im Inneren letztendlich eine digitale Recheneinheit darstellt, bedarf es weiterer, trickreicher Methoden, um eine echte Beschleunigung zu erhalten. Viele Modelle (z. B. der 8087) verfügen über hardwareseitig optimierte Rechenmethoden wie z. B. den CORDIC-Algorithmus für trigonometrische Funktionen, welcher nur durch Addition und Registerverschiebung, aber ohne langwierige Multiplikation auskommt. Oft wird eine große Beschleunigung auch über fest implementierte Lookup-Tabellen erreicht. Das heißt, die Werte werden nicht über mehrmalige Schleifendurchläufe ermittelt, sondern zuerst mit Hilfe von Tabellen näherungsweise und dann durch Interpolationsverfahren bis zu hinreichender Genauigkeit ermittelt (ein Fehler in einer solchen Tabelle war Ursache des sogenannten Pentium-Bug). Weiterhin kann eine FPU ihre Register oftmals als Matrix organisieren und so Vektorrechnungen beschleunigen.

Die meisten FPUs stellen Operationen für die Grundrechenarten (mit höherer Genauigkeit als die CPU), Logarithmus-, Wurzel- und Potenzrechnung und trigonometrische Funktionen, sowie Funktionen für das Rechnen mit Matrizen zur Verfügung.

Die Rechenleistung einer FPU wird meistens in SPECfp gemessen, im Gegensatz zu den SPECint einer CPU.

Siehe auch

Einzelnachweise

Weblinks