Gleitkommaeinheit
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.
Allgemeines[Bearbeiten]
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. Weiterhin kann eine FPU ihre Register oftmals als Matrix organisieren und somit auch Vektorrechnungen beschleunigen.
Wenn ein Computer Gleitkommaoperationen ausführen soll, gibt es zwei prinzipielle Möglichkeiten:
- Software-Emulation der Funktionen durch die CPU, z. B. unter Verwendung von Gleitkomma-Libraries
- Auslagerung der Operationen in einen dedizierten Koprozessor
Frühe CISC-Prozessoren verfügten meist nicht über eingebaute Mechanismen zur Behandlung von Gleitkommazahlen. Gleitkommaberechnungen und mathematische Funktionen wurden per Software durch den Hauptprozessor erledigt. Dies beansprucht einerseits Rechenleistung im Hauptprozessor und ist andererseits erheblich langsamer als eine spezialisierte Hardwarelösung. Da derartige spezialisierte Koprozessoren vorwiegend komplexere Operationen wie Multiplikation, Division oder Wurzelziehen und transzendente Funktionen durchführen, werden sie auch „mathematische Koprozessoren“ genannt.
Bei CISC-Mikroprozessoren konnten die Systeme dann teilweise mit zusätzlichem Koprozessor ausgerüstet werden. Das waren z. B. von AMD der AM9511 bzw. AM9512 (lizenziert von Intel als Intel i8231 bzw. i8232), 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 oft die Möglichkeit, einen Koprozessor direkt auf dem Motherboard nachzurüsten. Dies waren insbesondere die Koprozessoren von Intel 8087, 80287, 80387 und 80487 oder auch Weitek Abacus 3167<ref name="Weitek3167">https://cpu-collection.de/?l0=cl&l1=FPU&l2=Weitek</ref>. Für die 68k-CPUs von Motorola sind das 68881 und 68882.
Bei RISC-Computern ist ein mathematischer Koprozessor oft von vorneherein Teil des Gesamtsystems und daher vorinstalliert, vor allem auch, da solche Geräte bevorzugt in Anwendungsbereichen mit umfangreichen Berechnungen benutzt worden sind (CAD, CAM, CIM, 3D-Grafik). Jedoch sind auch hier zunächst CPU und FPU oft zwei getrennte Bausteine. So verwendet der IBM RT-PC eine NS32081 FPU oder Motorolas 68881. Frühe Sun SPARC Systeme benutzen Weitek 1164/1165 oder Texas Instruments 8847 als FPU. Dagegen kommen MIPS Systeme oft mit ihrer vordefinierten CPU/FPU Kombination, als 2000/2010 oder 3000/3010. ARM Systeme können mit einer FPA-10 FPU ausgerüstet werden.<ref name="FPA-10">https://chrisacorns.computinghistory.org.uk/docs/GECPlessey/GECPlessey_FPA10DataSheet.pdf</ref> Ausnahmen davon sind Clipper C100, der von Anfang mit integrierter FPU versehen war, sowie auch Motorola 88k.
Mit fortschreitender Integration wurden die FPUs in die CPU integriert (z. B. Intel Pentium oder PA-RISC PA-7100).
Eingeläutet wurde das Zeitalter der integrierten FPUs durch mehrere Faktoren:
- In CPUs integrierte Caches sind unvereinbar mit externen FPUs.
- Mathematische Funktionen wurden zunehmend in „normalen“ Applikationen verwendet, z. B. im Rendern von Zeichensätzen.
- Gatterfunktionen wurden zunehmend preiswerter, Sockel und Steckverbinder eher teurer.
Teils wurden zu Punkt 1 auch kreative Lösungen erdacht: Intels letzte eigenständige Gleitkommaeinheit, der externe Coprozessor i487, war 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.<ref><templatestyles src="Webarchiv/styles.css" />Skriptfehler: Ein solches Modul „WLink“ ist nicht vorhanden. ( vom 16. März 2012 im Internet Archive)</ref>
Aufbau und Funktionsweise[Bearbeiten]
Das Vorhandensein einer FPU ermöglicht eine erhebliche Leistungssteigerung für gleitkommaintensive Berechnungen. Zudem 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 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 (etwa 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. Dabei werden die Werte nicht über mehrmalige Schleifendurchläufe ermittelt, sondern zuerst mit Hilfe von Tabellen näherungsweise und dann durch Interpolationsverfahren bis zu hinreichender Genauigkeit bestimmt. Ein Fehler in einer solchen Tabelle war Ursache des sogenannten Pentium-Bug.
Geschwindigkeitsmessungen[Bearbeiten]
Die Rechenleistung einer FPU wird meistens in SPECfp gemessen, im Gegensatz zu den SPECint einer CPU.
Eine weitere übliche Variante ist die Angabe in FLOPS der FPU.
Ein schöner und oft hinreichend komplexer Test bzw. Vergleichswert ist auch die Zeit bis zur Fertigstellung des Apfelmännchen Fraktals unter gleichen Bedingungen (Ausschnitt, Iterationstiefe, Farbanzahl), optimalerweise mit dem gleichen Quellcode.
Nachfolge[Bearbeiten]
In den allermeisten Fällen werden Gleitkomma-Berechnungen seit x86_64 in SSE- bzw. SSE2-Befehlen erledigt.<ref>Wasil Zafar: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. (Blog) Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden. ehemals im Vorlage:Referrer (nicht mehr online verfügbar) (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.): Skriptfehler: Ein solches Modul „Text“ ist nicht vorhanden.</ref><ref>Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar) (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.): Skriptfehler: Ein solches Modul „Text“ ist nicht vorhanden.</ref> Das liegt zum einen daran, dass seit AMD64 von 2003 davon auszugehen ist, dass jeder 64-Bit-x86-Prozessor SSE2 bietet. Zum anderen liegt es aber auch an der Umsetzung von x87 vs. jener der x86-SIMD-Erweiterungen (neben SSE auch AVX): x87 erfordert, dass die Daten über den Stack verarbeitet werden, was zur Folge hat, dass das Hin- und Herschieben der Daten zum und vom Stack oft länger dauert als die Berechnung selbst; SSE bis SSE4.2 und AVX hingegen sind Register-basiert.<ref>O. Lawlor: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. (Vorlesung) In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. University of Alaska Fairbanks, Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden. ehemals im Vorlage:Referrer (nicht mehr online verfügbar) (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.): Skriptfehler: Ein solches Modul „Text“ ist nicht vorhanden.</ref>
Siehe auch[Bearbeiten]
Einzelnachweise[Bearbeiten]
<references />
Weblinks[Bearbeiten]
- Großes INTEL CPU/FPU Archiv – Viele Bilder und Infos
- <templatestyles src="Webarchiv/styles.css" />Skriptfehler: Ein solches Modul „WLink“ ist nicht vorhanden. ( vom 8. März 2014 im Internet Archive) (Memento vom 8. März 2014 im Internet Archive; englisch; PDF-Datei; 1,38 MB)
<templatestyles src="Erweiterte Navigationsleiste/styles legacy.css" />Vorlage:Klappleiste/Anfang
| nach Wortbreite |
1-Bit-Architektur • Bit-Slice-Architektur • 4-Bit-Architektur • 8-Bit-Architektur • 16-Bit-Architektur • 32-Bit-Architektur • 64-Bit-Architektur | |
| nach Befehlssatzaufbau | ||
| mit Optimierung für Einsatzzweck |
(Haupt-)Prozessor • Hardwarebeschleunigung • Grafikprozessor • GPGPU • Streamprozessor • Soundprozessor • Gleitkommaeinheit • Netzwerkprozessor • Physikbeschleuniger • Vektorprozessor • Tensor Processing Unit |