Ich habe ein digitales Signalverarbeitungssystem, das auf einem schnellen x86-Computer mit Gleitkommazahlen mit doppelter Genauigkeit arbeitet . Mir ist aufgefallen, dass ich den riesigen Dynamikbereich der Gleitkommadarstellung nicht wirklich nutze - alle Größen passen problemlos in den Bereich ± 32768.
Meine Frage: Ist es möglich, dass das Umschalten auf Festpunktberechnungen einen Vorteil in Bezug auf die numerische Genauigkeit (hohe Priorität) oder die Rechenzeit (niedrige Priorität) bietet?
Die Antwort hängt natürlich davon ab, wie viele Bits für eine Festpunktberechnung verfügbar sind. Wie viele Präzisionsbits verwenden typische Festkommasysteme? Ist es möglich, Festpunktberechnungen mit beispielsweise 64 Bit ( 16 Bit ganzzahliger Teil, 48 Bit Bruchteil ) auf x86-64 effizient durchzuführen?
Ich hatte immer gedacht, dass Festkommaberechnungen nur in Situationen verwendet werden, in denen die CPU-Leistung begrenzt ist. Ist es sinnvoll, Festkommaberechnungen zu verwenden, wenn die CPU-Leistung keine Rolle spielt?
quelle
Antworten:
Die numerische Genauigkeit von Ganzzahlen ist nur dann besser als die numerische Genauigkeit von Gleitkommazahlen, wenn die Ganzzahlauflösung besser ist. Doubles haben 52 Bruchbits, daher haben Floats mit doppelter Genauigkeit eine schlechtere Auflösung als ganze Zahlen bei etwa , was viel größer als 32768 ist ( 2 15 ). Nein, die numerische Genauigkeit ist nicht besser, wenn Sie zu ganzen Zahlen wechseln.252 2fünfzehn
Das zweite Problem ist die Geschwindigkeit. Die Antwort lautet: Es kommt auf die Hardware an. Wenn Sie Ihr Programm auf einem digitalen Signalprozessor ausführen, der über mehrere Festkomma-Multiplikations- / Akkumulationskerne verfügt, ist dies im Festkomma-Prozess weitaus schneller. Auf einem x86-Chip hingegen ist der Fixpunkt wahrscheinlich langsamer . Ich habe genau das getan, wovon Sie sprechen, und gesehen, wie sich meine Ausführungszeiten erhöht haben.
Nachdem ich einige Suchanfragen im Internet durchgeführt hatte, stellte ich fest, dass dies häufig vorkommt. Der Grund dafür ist, dass es einen dedizierten Gleitkomma-Prozessor gibt, der beim Übergang zum Festkomma nichts tut, während die Festkomma-Hardware mit der regulären Festkomma-Aktion wie der Zeigerarithmetik gemeinsam genutzt wird.
Wenn Sie die Verarbeitung beschleunigen möchten, müssen Sie von Floats mit doppelter Genauigkeit zu Floats mit einfacher Genauigkeit wechseln. Das sollte zu einer deutlichen Geschwindigkeitssteigerung führen. Dies würde natürlich Ihre numerische Genauigkeit verringern.
quelle
Die Vorteile von Festkomma liegen hauptsächlich in der Leistung (z. B. wenn Sie eine Auswahl an Prozessorhardware haben oder der Prozessor nicht verwendete Funktionseinheiten gut herunterfahren kann). Dies liegt daran, dass Festkommaeinheiten für eine bestimmte Technologie- und Betriebsausgaberate üblicherweise kleiner sind (weniger Transistoren, kürzere Drähte, weniger Kapazität, die pro MAC überwunden werden muss) als Gleitkommaeinheiten.
Eine große Anzahl gängiger moderner Prozessoren (Server, PC und sogar Mobilgeräte) verfügt jedoch über mehr und schnellere FPUs (insbesondere FP-Einheiten mit einfacher Genauigkeit) als ganzzahlige Multiplikatoren, und der größte Teil der Systemleistung stammt nicht aus der Verwendung der FPU, daher wird die Festplatte verwendet -point hat für die typische DSP-Berechnung dieser Produkte nur geringe oder keine Vorteile und kann wahrscheinlich einen Nachteil in Bezug auf die reine Leistung darstellen. Mit der aktuellen Technologie wird jeder Vorteil für den Festkomma-Modus hauptsächlich bei winzigen eingebetteten Produkten wie Geräten mit Tastengröße erzielt.
Berücksichtigen Sie jedoch auch Speicher- und Prozessor-Cache-Footprints. Die clevere Verwendung kleinerer Datentypen (Short Int und Float), um eine große Berechnung vollständig in den Datencache zu integrieren, kann alle Vorteile der reinen FPU-Bandbreite ausgleichen.
quelle
Ziehen Sie Floats mit einfacher Genauigkeit dem Doppelten vor - dies halbiert Ihre Speicherbandbreite, den Cache-Platzbedarf und die Speicheranforderungen und beschleunigt einige mathematische Operationen. Es eröffnet auch die Möglichkeit einer 4-Wege-SIMD, wenn weitere Optimierungen erforderlich sind.
Ein Fixpunkt lohnt sich nur dann wirklich, wenn Sie keine FPU haben. Die meisten modernen x86-CPUs verfügen über zwei FPUs, sodass durch die Verwendung eines Fixpunkts nichts zu gewinnen ist und die Leistung mit einem Fixpunkt möglicherweise sogar erheblich schlechter ist. (Beachten Sie auch, dass für Fixpunkte zusätzliche Anweisungen im Vergleich zu Gleitkommawerten für Operationen wie Multiplikation erforderlich sind.)
quelle
Zusätzlich zu den hier sehr guten Antworten gibt es einige Dinge, die es wert sind, hinzugefügt zu werden:
quelle
Einige Punkte zu beachten:
Als letztes Wort denke ich, dass unsere Daten aus der realen Welt wertvoll sind und das blinde Zahlen-Crunching des Computers eine bescheidene Kleinigkeit ist. Der Computer muss für Ihre Daten und für Sie die Schwerarbeit leisten und darf nicht so behandelt werden, als wäre er der wahre Star in der Show.
quelle