Warum sind keine Hardware-Gleitkomma-Dezimalzahlen beschleunigt wie Gleitkomma-Binärzahlen?

StackOverflow https://stackoverflow.com/questions/1447215

  •  22-07-2019
  •  | 
  •  

Frage

Ist es das wert es in Hardware zu implementieren? Wenn ja, warum? Wenn nicht, warum nicht?


Sorry, ich dachte, es ist klar, dass ich über Dezimal Rationale Zahlen spreche! Ok so etwas wie decNumber ++ für C ++, dezimal für .NET ... Hoffe, es ist jetzt klar: )

War es hilfreich?

Lösung

Die neueste Version des IEEE 754: 2008 Standard in der Tat Hardware-dezimal nicht definiert floating Punktzahl, die Darstellungen unter Verwendung der Software in der Frage verweist gezeigt. Die vorherige Version des Standards ( IEEE 754: 1985 ) hat dezimal nicht bieten Gleitkommazahlen . Die meist aktuelle Hardware implementiert den 1985-Standard und nicht den 2008-Standard, aber IBMs iSeries-Computer Power6 Chips solche Unterstützung haben, und so tun, um die z10 Großrechner.

Die Standardisierungsbemühungen für Fließkomma wurde von Mike Cowlishaw von IBM UK angeführt, die eine Website hat voller nützlicher Informationen (die Software in der Frage einschließlich). Es ist wahrscheinlich, dass zu gegebener Zeit, andere Hardware-Hersteller wird auch Gleitpunktberechnungen Einheiten auf ihre Chips einführen, aber ich habe nicht eine Erklärung der Richtung, wenn (oder ob) Intel könnte man hinzufügen, gehört. Intel hat optimiert Softwarebibliotheken es.

Die C Normenausschuss Unterstützung Gleitkomma für dezimal hinzufügen sucht und dass die Arbeit TR 24732.

Andere Tipps

Einige IBM-Prozessoren verfügen über spezielle dezimal Hardware enthalten (Gleitpunktberechnungen | DFP- Einheit).

Im Beitrag von 18. September um 23:43 Uhr beantwortet Daniel Pryden

Der Hauptgrund ist, dass DFP-Einheiten mehr Transistoren in einem Chip müssen dann BFP-Einheiten. Der Grund dafür ist der BCD-Code Dezimalzahlen in einer binären Umgebung zu berechnen. Die IEEE754-2008 hat mehrere Methoden, um die Überlastung zu minimieren. Es scheint, dass die DPD hxxp: //en.wikipedia.org/wiki/Densely_packed_decimal Methode effektiver im Vergleich zum BID hxxp ist. //En.wikipedia.org/wiki/Binary_Integer_Decimal Methode

Normalerweise benötigen Sie 4 Bits den Dezimal-Bereich von 0 bis 9. Bit bedecken die 10 bis 15 ungültig sind aber immer noch möglich, mit BCD. Daher komprimieren die DPD 3 * 4 = 12 Bit in 10 Bit den Bereich von 000 bis 999 1024 (10 ^ 2) Möglichkeiten abzudecken.

Generell ist es zu sagen, dass BFP schneller als DFP ist. Und BFP benötigt weniger Platz auf einem Chip dann DFP.

Die Frage, warum IBM eine DFP-Einheit implementiert ist ganz einfach beantwortet: Sie bauen Server für den Finanzmarkt. Wenn Daten Geld darstellen, sollte es zuverlässig sein.

Mit Hardware-beschleunigte Dezimalarithmetik, einige Fehler accour nicht wie in binär. 1/5 = 0,2 => ,0110011001100110011001100110 ... binär so rezidivierenden Fraktionen vermieden werden könnten.

Und die overhelming round () Funktion in Excel wäre nutzlos mehr: D (-> Funktion = 1 * (0,5-0,4-0,1) wtf)

Hoffnung, dass Ihre Frage ein wenig erklären!

Es gibt (ein klein wenig) Dezimalstring Beschleunigung, aber ...

Das ist eine gute Frage. Meine erste Reaktion war „Makro ops hat immer zu beweisen, aus nicht bestanden“ , sondern darüber nach zu denken, was Sie sprechen würde über eine ganze Menge schneller gehen, wenn in einer Funktionseinheit implementiert. Ich denke, es kommt darauf an, ob diese Vorgänge genug sind, getan Rolle zu spielen. Es ist eine ziemlich traurig Geschichte der Makro op und anwendungsspezifische Spezial-Anweisungen, insbesondere die älteren Versuche dezimal Finanz Formate sind nur Legacy-Gepäck jetzt. Zum Beispiel, ich zweifle, ob sie viel verwendet werden, aber jeder PC hat den Intel BCD Opcodes , die aus

DAA, AAA, AAD, AAM, DAS, AAS

Es war einmal, waren Dezimalstring Anweisungen gemeinsam auf High-End-Hardware. Es ist nicht klar, dass sie immer viel von einer Benchmark Unterschied gemacht. Programme verbringen viel Zeit zu testen und die Verzweigung und die Dinge in Bewegung und Berechnung Adressen. Es ist normalerweise nicht sinnvoll, Makro-Operationen in der Befehlssatzarchitektur zu setzen, weil insgesamt die Dinge schneller zu gehen scheinen, wenn Sie die CPU die kleinste Anzahl von grundlegenden Dinge zu tun geben, so kann er alle seine Ressourcen setzen in sie tun, wie schnell wie möglich.

In diesen Tagen, nicht einmal alle binären ops sind tatsächlich in der real ISA. Die CPU übersetzt die alte ISA in Mikro-ops zur Laufzeit . Es ist alles Teil schnell gehen, indem sie in dem Kerngeschäft spezialisiert. Denn jetzt die übrig gebliebenen Transisters scheinen für einige Grafiken und 3D-Arbeiten zu warten, das heißt, MMX, SSE, 3DNow!

Ich nehme an, es ist möglich, dass ein sauber-Bogen-Design radikal etwas tun könnte und die aktuelle (HW) wissenschaftlichen und (SW) Gleitpunktberechnungen Formate vereinen, aber nicht halten Sie Ihren Atem.

Nein, sie sind sehr speicher ineffizient. Und die Berechnungen sind auch auf Hardware nicht einfach zu implementieren (natürlich kann es geschehen, aber es kann auch viel Zeit verwenden). Ein weiterer Nachteil des Dezimalformat ist, ist es nicht widly verwendet, bevor Untersuchungen zeigten, dass die binären formatierten Zahlen genauer waren das Format populär war für eine Zeit. Aber jetzt Programmierer wissen es besser. Das Dezimalformat is't effizient und ist verlustbehaftet. Auch zusätzliche Hardware-Darstellungen erfordern zusätzliche Befehlssätze, die zu schwierigeren Code führen kann.

Die Hardware, die Sie verwendet werden sollen ziemlich häufig sein.

Ältere CPUs hatte Hardware BCD (Binaray codiert dezimal) Arithmetik. (Die kleinen Intel-Chips hatten eine wenig Unterstützung wie von früheren Plakaten vermerkt)

Hardware BCD war sehr gut im Fortran beschleunigen, die für die Zahlen 80-Bit-BCD verwendet.

Scientific Computing verwendet, um einen erheblichen Anteil des weltweiten Marktes ausmachen.

Da jeder (relativ gesehen) bekam Heim-PC mit Windows, bekam der Markt klein in Prozent. So tut es niemand mehr.

Da Sie nicht dagegen, 64-Bit-Doppel (binäre Gleitkomma) mit für die meisten Dinge, es funktioniert meistens.

Wenn Sie 128-Bit-Binär-Floating-Point auf moderne Hardware Vektoreinheiten verwenden ist es nicht so schlimm. Noch weniger genau als 80bit BCD, aber Sie das bekommen.

Zu einem früheren Job, ein Kollege früher von JPL war erstaunt, wir Fortran immer noch benutzt. „Wir haben auf C und C ++ konvertiert er uns gesagt.“ Ich habe ihn gefragt, wie sie das Problem der mangelnden Präzision gelöst. Sie hatten nicht bemerkt. (Sie haben auch nicht die gleiche Raumsonde Landegenauigkeit haben sie früher. Aber jeder kann einen Planeten verfehlen.)

Also, im Grunde 128bit Doppel in der Vektoreinheit sind in Ordnung, und überall verfügbar.

Mein zwanzig Cent. Bitte stellen sie nicht als Gleitkommazahl:)

Dezimalgleitkomma-Standard (IEEE 754-2008) ist bereits in der Hardware von zwei Unternehmen durchgeführt werden; IBM 's Power 6/7 basierte Server und SilMinds SilAx PCIe-basierte Beschleunigungskarte.

SilMinds veröffentlicht „eine Fallstudie über die Dezimalarithmetik Ausführung Umwandlung seinen HW-Lösungen . Ein großer Schub in der Zeit und senkte den Energieverbrauch vorgestellt.

Darüber hinaus sind mehrere Veröffentlichungen "Michael J. Schulte" und andere zeigen sehr positive Ergebnisse Benchmarks, und einige Vergleich zwischen DPD und BID-Formate (beide definiert im IEEE-754-2008-Standard)

Sie können PDF-Dateien finden:

  1. Performance-Analyse von Dezimal-Fließkomma Bibliotheken und ihre Auswirkungen auf dezimal Hardware- und Softwarelösungen

  2. Eine Übersicht über Hardware-Design für Dezimalarithmetik

  3. Energie und Verzögerung Verbesserung über Dezimal Gleitpunkteinheiten

Diese drei Papiere sollten für Ihre Fragen mehr als genug sein!

ich spekulieren, dass es keine rechenintensive Anwendungen von Dezimalzahlen sind. Auf der anderen Seite weist Gleitzahl ausgiebig in technischen Anwendungen eingesetzt werden, die enorme Datenmengen verarbeiten müssen und keine exakten Ergebnisse benötigen, müssen nur innerhalb einer gewünschten Genauigkeit bleiben.

Dezimalzahlen (und allgemeine, Fraktionen) sind relativ leicht als ein Paar von ganzen Zahlen zu implementieren. Allzweck-Bibliotheken sind allgegenwärtig und einfach schnell genug für die meisten Anwendungen.

Wer die ultimative Geschwindigkeit benötigt wird deren Umsetzung zur Hand Abstimmung (zB den Divisor Ändern einer bestimmten Nutzung anzupassen, algebraicly Kombination / Neuordnen der Operationen, geschickten Einsatz von SIMD schlurft ...). Lediglich das Codieren der am häufigsten verwendeten Funktionen in einer Hardware-ISA würde sicherlich niemals befriedigen -. Aller Wahrscheinlichkeit nach, es würde nicht helfen

Die einfache Antwort ist, dass Computer sind binäre Maschinen. Sie haben keine zehn Finger, sie haben zwei. So Baubeschläge für Binärzahlen ist wesentlich schneller, einfacher und effizienter als für Dezimalzahlen Baubeschläge.

Übrigens: dezimal und binär sind Zahlenbasen, während Festpunkt und Gleitkommazahlen sind Mechanismen zur Annäherung an rationalen Zahlen. Die zwei vollständig orthogonal sind. Sie Gleitkommazahlen Dezimalzahlen haben kann (.NET die System.Decimal wird auf diese Weise implementiert) und Festkomma Binärzahlen (normale ganze Zahlen sind nur ein Spezialfall dieses)

Gleitkomma-Mathematik ist im wesentlichen ein Versuch, Dezimalzahlen in Hardware zu implementieren. Es ist lästig, weshalb die Dezimal-Typen teilweise in Software erstellt werden. Es ist eine gute Frage, warum CPUs nicht mehr Typen unterstützen, aber ich nehme an, es gegen RISC-Prozessoren zurück zu CISC geht -. RISC die Performance Schlacht gewonnen, so dass sie versuchen, die Dinge einfach, diese Tage zu halten, ich denke,

Moderne Computer sind in der Regel für allgemeine Zwecke. Gleitpunktarithmetik ist sehr Allzweck-, während Dezimal einen weitaus bestimmten Zweck hat. Ich denke, dass ein Teil des Grundes ist.

Haben Sie den typischen numerischen Integral-Typen "int" bedeuten, "long", "short" (etc.)? Da Operationen auf diesen Typen werden auf jeden Fall in Hardware implementiert. Wenn Sie sprechen beliebige Genauigkeit eines große Zahl ( „bignums“ und „Dezimalzahlen“ und so weiter), dann ist es wahrscheinlich eine Kombination aus Seltenheit von Operationen dieser Datentypen und die Komplexität des Aufbaus unter Verwendung von Hardware mit beliebig großen Datenformaten umgehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top