Unum (Zahlenformat) - Unum (number format)

Unums ( universelle Zahlen ) sind eine Familie von Formaten und Arithmetik, ähnlich dem Gleitkomma , vorgeschlagen von John L. Gustafson . Sie sind als Alternative zum allgegenwärtigen Gleitkomma-Standard IEEE 754 konzipiert und können in der neuesten Version (sogenannte posits ) als Drop-In-Ersatz für Programme verwendet werden, die nicht auf spezifische Eigenschaften von IEEE 754 angewiesen sind.

Typ I Unum

Die erste Version von unums, jetzt offiziell als Typ I unum bekannt , wurde in seinem Buch The End of Error als Obermenge des IEEE-754-Gleitkommaformats vorgestellt. Die beiden bestimmenden Merkmale des unum-Formats vom Typ I sind:

  • ein Speicherformat mit variabler Breite sowohl für den Signifikand als auch für den Exponenten und
  • ein u-Bit , das bestimmt, ob die Unum einer exakten Zahl ( u  = 0) oder einem Intervall zwischen aufeinanderfolgenden exakten Unums ( u  = 1) entspricht. Auf diese Weise überdecken die Unums die gesamte erweiterte reelle Zahlengerade [−∞,+∞].

Um eine Berechnung mit dem Format durchzuführen, schlägt Gustafson vor, Intervallarithmetik mit einem Paar von Unums zu verwenden, was er als ubound bezeichnet , wodurch garantiert wird, dass das resultierende Intervall die exakte Lösung enthält.

William M. Kahan und John L. Gustafson diskutierten auf der Arith23- Konferenz über Unums .

Typ II Unum

Unums vom Typ II wurden Ende 2016 als komplettes Redesign von Unums eingeführt, das die IEEE-754-Kompatibilität brach.

Typ III Unum (positiv & gültig)

Im Februar 2017 Gustafson offiziell Typ III Unums eingeführt , die besteht aus Setzungen für feste Floating-Point-Ähnliche Werte und Wertsachen für Intervallarithmetik .

Setzen

Posits sind eine hardwarefreundliche Version von unum, bei der die Schwierigkeiten des ursprünglichen Typ-I-Unums aufgrund seiner variablen Größe behoben werden. Ähnliche Größenpositionen im Vergleich zu Floats bieten einen größeren Dynamikbereich und mehr Bruchbits für die Genauigkeit. In einer unabhängigen Studie bestätigten Lindstrom, Lloyd und Hittinger vom Lawrence Livermore National Laboratory , dass Posts Floats in der Genauigkeit übertreffen. Positionen haben eine besonders hohe Genauigkeit im Bereich nahe eins, wo die meisten Berechnungen stattfinden. Dies macht es für den aktuellen Trend im Deep Learning sehr attraktiv, die Anzahl der verwendeten Bits zu minimieren. Es hilft möglicherweise allen Anwendungen, eine Beschleunigung zu erreichen, indem es die Verwendung von weniger Bits ermöglicht (da es mehr Bruchbits für die Genauigkeit hat), wodurch die Netzwerk- und Speicherbandbreite sowie der Energiebedarf reduziert werden und wir der Exascale einen Schritt näher kommen .

Positionen haben Index- und Mantissen-Bitfelder mit variabler Größe, wobei die Aufteilung durch einen "Regime"-Indikator angegeben wird. Gustafson behauptet, dass sie eine bessere Genauigkeit als Standard-Gleitkommazahlen bieten und dabei weniger Bits beanspruchen.

Posits haben ein anderes Format als IEEE 754 Floats. Sie bestehen aus vier Teilen: Vorzeichen, Regime, Exponent und Bruch (auch als Signifikand/Mantisse bekannt). Für eine n- Bit-Position kann das Regime die Länge 2 bis ( n  − 1) haben. Das Format des Regimes ist so, dass es eine Wiederholung eines Bits mit gleichem Vorzeichen ist und durch ein Bit mit einem anderen Vorzeichen abgeschlossen wird.

Beispiel 1:

Beispiel 1 Beispiel 2
00000000000000 1 111 0

Beispiel 1 zeigt ein Regime mit 14 Bits mit gleichem Vorzeichen (Bit 0), die durch ein Bit mit unterschiedlichem Vorzeichen (Bit 1) abgeschlossen werden. Da es 14 Bits mit gleichem Vorzeichen gibt, beträgt die Lauflänge des Regimes 14.

Beispiel 2 zeigt ein Regime mit 3 Bits mit gleichem Vorzeichen (Bit 1), die durch ein Bit mit unterschiedlichem Vorzeichen (Bit 0) abgeschlossen werden. Da es 3 Bits mit gleichem Vorzeichen gibt, beträgt die Lauflänge des Regimes 3.

Vorzeichen-, Exponenten- und Bruchbits sind IEEE 754 sehr ähnlich; Stellen können jedoch entweder Exponenten- und Bruchbits oder beide weglassen, wodurch eine Stelle übrig bleibt, die nur aus Vorzeichen- und Regime-Bits besteht. Beispiel 3 zeigt die längstmögliche Regime-Lauflänge für eine 16-Bit-Position, wobei das Regime-Abschlussbit, das Exponentenbit und die Bruchbits die Länge der Größe der Position überschreiten. Beispiel 4 veranschaulicht die kürzestmögliche Lauflänge von 1 für eine 16-Bit-Position mit einem Exponentenbit (Bitwert = 1) und 12 Bruchbits (Bitwert = 100000000001).

Beispiel 3: Regime-Lauflänge = 15 Beispiel 4: Regime-Lauflänge = 1
0 111111111111111 0 1 0 1 100000000001

Die empfohlenen Positionsgrößen und entsprechenden Exponentenbits und Lagengrößen:

Positionsgröße (Bits) Anzahl der Exponentenbits Quire-Größe (Bits)
8 0 32
16 1 128
32 2 512
64 3 2048

Hinweis : Es wird erwartet, dass 32-Bit-Position ausreicht, um fast alle Anwendungsklassen zu lösen.

Quire

Quire ist eine der nützlichsten Funktionen von Positionen. Es ist ein spezieller Datentyp, der eine "nahezu unendliche" Anzahl von Bits zum Sammeln von Punktprodukten angibt. Es basiert auf den Arbeiten von Ulrich W. Kulisch und Willard L. Miranker .

Gültig

Gustafson hat noch keine vollständige Spezifikation von Valids veröffentlicht, aber sie werden als Unum-Modus vom Typ III beschrieben, der Ergebnisse in einen bestimmten Bereich einschränkt.

Implementierungen

Es gibt mehrere Software- und Hardware-Implementierungen von Posts aus der Community. Der erste vollständig parametrisierte Posit-Arithmetik-Hardware-Generator wurde 2018 vorgeschlagen.

Unum-Implementierungen wurden in Julia untersucht . und MATLAB . Eine C++-Version mit Unterstützung für beliebige Positionsgrößen in Kombination mit einer beliebigen Anzahl von Exponentenbits wird ebenfalls bereitgestellt. Eine schnelle Implementierung in C, SoftPosit, bereitgestellt vom NGA-Forschungsteam basierend auf Berkeley SoftFloat, ist die neueste Ergänzung zu den verfügbaren Software-Implementierungen.

Projekt

Autor

Typ Präzisionen Quire

Unterstützung?

Geschwindigkeit Testen Anmerkungen
SoftPosition

EIN STERN

C-Bibliothek basierend auf Berkeley SoftFloat

C++-Wrapper zum Überschreiben von Operatoren Python-Wrapper mit SWIG von SoftPosit

8, 16, 32 veröffentlicht und vollständig; Jawohl ~60 bis 110 Mpops/s auf x86-Kern (Broadwell) 8: Erschöpfend;

16: Erschöpfend außer FMA, Frage 32: Erschöpfender Test ist noch im Gange. Keine bekannten Fehler.

Die derzeit schnellste und umfassendste C-Bibliothek für Positionen. Open-Source-Lizenz. Entwickelt für den Plug-in-Vergleich von IEEE-Floats und -Positionen.
posit4.nb

EIN STERN

Mathematica-Notizbuch Alle Jawohl < 80 kPop/s Erschöpfend für niedrige Genauigkeiten. Keine bekannten Fehler. Originaldefinition und Prototyp. Die vollständigste Umgebung zum Vergleichen von IEEE-Gleitkommazahlen und -Positionen. Open Source (MIT-Lizenz). Viele Anwendungsbeispiele, einschließlich linearer Solver
post-javascript

EIN STERN

JavaScript-Widget Konvertieren Sie Dezimal in Position 6, 8, 16, 32; erzeuge die Tabellen 2–17 mit es 1–4. N / A N / A; interaktives Widget Vollständig getestet Tabellengenerator und Konvertierung
Universal

Stillwater Supercomputing, Inc

C++-Vorlagenbibliothek

C-Bibliothek Python-Wrapper Golang-Bibliothek

Posit-Float mit beliebiger Genauigkeit gültig (p)

Unum Typ 1 (p) Unum Typ 2 (p)

Beliebige Bedarfskonfigurationen mit programmierbarer Kapazität posit<4,0> 1GPOPS

Posit<8,0> 130MPOPS Posit<16,1> 115MPOPS Posit<32,2> 105MPOPS Posit<64,3> 50MPOPS Posit<128,4> 1MPOPS Posit<256,5> 800KPOPS

Vollständige Validierungssuite für beliebige Positionen

Randoms für große Post-Konfigurationen. Verwendet Induktion, um zu beweisen, dass nbits+1 richtig ist, keine bekannten Fehler

Open Source. MIT-Lizenz

vollständig in C/C++-Typen und automatische Konvertierungen integriert Unterstützt die vollständige C++-Mathematikbibliothek (nativ und Konvertierung nach/von IEEE) Laufzeitintegrationen: MTL4/MTL5, Eigen, Trilinos, HPR-BLAS Anwendungsintegrationen: G+SMO, FDBB, FEniCS, ODEintV2 , TVM.ai Hardware Accelerator-Integration (Xilinx, Intel, Achronix)

Speedgo

Chung Shin Yee

Python-Bibliothek Alle Nein ~20 Mpops/s Umfangreich; keine Fehler bekannt Open Source (MIT-Lizenz)
softposit-rkt

David Thien

SoftPosit-Bindungen für Racket Alle Jawohl Unbekannt Unbekannt
sfpy

Bill Zorn

SoftPostit-Bindungen für Python Alle Jawohl ~20-45 Mpops/s auf 4,9 GHz Skylake-Kern Unbekannt
Positoktave

Diego Coelho

Octave-Implementierung Alle Nein Unbekannt Begrenzte Tests; keine Fehler bekannt GNU General Public License
Sigmoid-Zahlen

Isaac Yonemoto

Julia Bibliothek Alle <32, alle ES Jawohl Unbekannt Keine bekannten Fehler (Posts).

Divisionsfehler (gültig)

Nutzt Julias Schablonen-Mathematik-Standardbibliothek, kann nativ Matrix- und Tensoroperationen, komplexe Zahlen, FFT, DiffEQ ausführen. Unterstützung für gültige
SchnellSigmoid

Isaac Yonemoto

Julia und C/C++ Bibliothek 8, 16, 32, alle ES Nein Unbekannt Bekannter Fehler bei der 32-Bit-Multiplikation Wird von LLNL in Schockstudien verwendet
SoftPosit.jl

Milan Klöwer

Julia Bibliothek Basierend auf Softposit;

8-Bit (es=0..2) 16-Bit (es=0..2) 24-Bit (es=1..2) 32-Bit (es=2)

Jawohl Ähnlich zu

A*STAR "SoftPosit" (Cerlane Leong)

Jawohl:

Posit (8,0), Posit (16,1), Posit (32,2) Andere Formate haben nicht die volle Funktionalität

Unterstützt grundlegende Funktionen der linearen Algebra in Julia (Matrixmultiplikation, Matrixsolve, Elgen-Zerlegung usw.)

Open Source. Probleme und Vorschläge auf GitHub. Dieses Projekt wurde aufgrund der Tatsache entwickelt, dass SigmoidNumbers und FastSigmoid von Isaac Yonemoto derzeit nicht gepflegt werden.

PySigmoid

Ken Mercado

Python-Bibliothek Alle Jawohl < 20 Mpops/s Unbekannt Open Source (MIT-Lizenz). Einfach zu bedienende Schnittstelle. Beispiel für ein neuronales Netz. Umfassende Funktionsunterstützung.
cppPosition

Emanuele Ruffaldi

C++-Bibliothek 4 bis 64 (beliebiger es-Wert); "Vorlagenversion ist 2 bis 63 Bit" Nein Unbekannt Ein paar grundlegende Tests 4 Ebenen von Operationen, die mit Positionen arbeiten. Spezielle Unterstützung für NaN-Typen (nicht standardmäßig)
bfp: Jenseits des Gleitkommas

Clément Guérin

C++-Bibliothek Irgendein Nein Unbekannt Fehler gefunden; Status der Fixes unbekannt Unterstützt + – × ÷ √ reziprok, negieren, vergleichen
Verilog.jl

Isaac Yonemoto

Julia und Verilog 8, 16, 32, ES=0 Nein Unbekannt Umfassend auf 8-Bit getestet, keine Fehler bekannt Nur für Deep-Learning-Anwendungen Addition, Subtraktion und Multiplikation vorgesehen. Es wurde ein Proof-of-Concept-Matrix-Multiplikator erstellt, der jedoch in seiner Genauigkeit nicht den Spezifikationen entspricht
Lombiq Arithmetik

Lombiq-Technologien

C# mit Hastlayer zur Hardwaregenerierung 8, 16, 32.

(64bit in Bearbeitung)

Jawohl 10 Mpops/s

Klicken Sie hier für mehr

Teilweise Erfordert Microsoft .Net-APIs
Deepfloat Jeff Johnson, Facebook SystemVerilog Beliebig (parametrierter SystemVerilog) Jawohl N / A

(RTL für FPGA/ASIC-Designs)

Begrenzt Entspricht nicht genau der Positionsspezifikation.

Unterstützt +,-,/,*. Implementiert sowohl logarithmische als auch normale, "lineare" Positionen Lizenz: CC-BY-NC 4.0 derzeit

Tokio Tech FPGA 16, 32, erweiterbar Nein "2 GHz", nicht übersetzt in Mpops/s Teilweise; bekannte Rundungsfehler Noch Open Source sein
PACoGen: Posit Arthmetic Core Generator Manish Kumar Jaiswal Verilog HDL für Posit-Arithmetik Jede Präzision.

Kann jede Kombination aus Wortgröße (N) und Exponentengröße (ES) generieren

Nein Designgeschwindigkeit basiert auf der zugrunde liegenden Hardwareplattform (ASIC/FPGA) Umfangreiche Tests für 8-Bit-Posi.

Mehrere Millionen Zufallstests werden für bis zu 32-Bit-Positionen mit verschiedenen ES-Kombinationen durchgeführt

Es unterstützt die Rundung auf die nächste Rundungsmethode.
Vinay Saxena, Forschungs- und Technologiezentrum, Robert Bosch, Indien (RTC-IN) und Farhad Merchant, RWTH Aachen University Verilog-Generator für VLSI, FPGA Alle Nein Ähnlich wie Floats mit gleicher Bitgröße N=8

- ES=2 | N=7,8,9,10,11,12 Selektive (20000*65536) Kombinationen für - ES=1 | N=16

Zur Verwendung in kommerziellen Produkten. Soweit wir wissen.

***Erste Integration von Positionen in RISC-V***

Posit aktivierter RISC-V Core

(Sugandha Tiwari, Neel Gala, Chester Rebeiro, V. Kamakoti, IIT MADRAS)

BSV-Implementierung (Bluespec System Verilog) 32-Bit-Position mit (es=2) und (es=3) Nein N / A Verifiziert gegen SoftPosit für (es=2) und getestet mit mehreren Anwendungen für (es=2) und (es=3). Keine bekannten Fehler. Erster vollständig postfähiger RISC-V-Kern. Unterstützt dynamisches Umschalten zwischen (es=2) und (es=3).

Mehr Infos hier.

unumjl

REX-Computing

FPGA-Version des "Neo" VLIW-Prozessors mit positiver numerischer Einheit 32 Nein ~1.2 Gpop/s Umfangreich; keine Fehler bekannt Keine Division oder Quadratwurzel. Erstes vollständiges Prozessordesign, das Floats durch Posits ersetzt.
PNU: Posit Numerische Einheit

Calligo Tech

FPGA; erste Arbeitsposition Hardware 32 Beansprucht, noch nicht getestet ~0,5 Mpops/s Umfangreiche Tests, nicht erschöpfend. Keine bekannten Fehler. Single-Op-Beschleuniger-Ansatz; ermöglicht die direkte Ausführung von C-Codes, die für Floats geschrieben wurden. + – × getestet; ÷ √ behauptete
IBM-TACC

Jianyu Chen

Spezifisches FPGA 32 Jawohl 16–64 Gpop/s Nur ein bekannter Fall getestet Führt eine 128-mal-128-Matrix-Matrix-Multiplikation (SGEMM) mit quire durch.
Tiefes PeNSieve

Raul Murillo

Python-Bibliothek (Software) 8, 16, 32 Jawohl Unbekannt Unbekannt Ein DNN-Framework mit Positionen

SoftPosition

SoftPosit ist eine Softwareimplementierung von Positionen, die auf Berkeley SoftFloat basiert. Dies ermöglicht einen Softwarevergleich zwischen Positionen und Floats. Es unterstützt derzeit

  • Hinzufügen
  • Subtrahieren
  • Multiplizieren
  • Teilen
  • Fused-multiply-add
  • Fused-Dot-Produkt (mit Lage)
  • Quadratwurzel
  • Konvertieren Sie die Position in eine vorzeichenbehaftete und vorzeichenlose Ganzzahl
  • Konvertieren Sie eine ganze Zahl mit und ohne Vorzeichen in eine positive Zahl
  • Position in eine andere Positionsgröße umwandeln
  • weniger als, gleich, weniger als gleich Vergleich
  • Auf nächste ganze Zahl runden

Hilfsfunktionen

  • Konvertieren Sie das Doppelte in eine Position
  • Position in Verdoppelung umwandeln
  • vorzeichenlose ganze Zahl in posit umwandeln

für 16-Bit-Positionen mit einem Exponenten-Bit und 8-Bit-Positionen mit Null-Exponenten-Bit. Die Unterstützung für 32-Bit-Positionen und flexible Typen (2-32 Bit mit zwei Exponenten-Bits) steht noch aus. Derzeit unterstützt es x86_64-Systeme. Es wurde auf GNU gcc (SUSE Linux) 4.8.5 Apple LLVM Version 9.1.0 (clang-902.0.39.2) getestet.

Beispiele :

Mit posit8_t . hinzufügen

#include "softposit.h"

int main (int argc, char *argv[]){

    posit8_t pA, pB, pZ;
    pA = castP8(0xF2);
    pB = castP8(0x23);

    pZ = p8_add(pA, pB);

    //To check answer by converting it to double
    double dZ = convertP8ToDouble(pZ);
    printf("dZ: %.15f\n", dZ);

    //To print result in binary (warning: non-portable code)
    uint8_t uiZ = castUI8(pZ);
    printBinary((uint64_t*)&uiZ, 8);

    return 0;
}

Schmelzpunktprodukt mit quire16_t

//Convert double to posit
posit16_t pA = convertDoubleToP16(1.02783203125 );
posit16_t pB = convertDoubleToP16(0.987060546875);
posit16_t pC = convertDoubleToP16(0.4998779296875);
posit16_t pD = convertDoubleToP16(0.8797607421875);

quire16_t qZ;

//Set quire to 0
qZ = q16_clr(qZ);

//accumulate products without roundings
qZ = q16_fdp_add(qZ, pA, pB);
qZ = q16_fdp_add(qZ, pC, pD);

//Convert back to posit
posit16_t pZ = q16_to_p16(qZ);

//To check answer
double dZ = convertP16ToDouble(pZ);

Kritik

William M. Kahan, der Hauptarchitekt von IEEE 754-1985, kritisiert Typ-I-Unums aus folgenden Gründen (einige werden in Typ-II- und Typ-III-Standards angesprochen):

  • Die Beschreibung von Unums-Umgehungen unter Verwendung der Infinitesimalrechnung zur Lösung physikalischer Probleme.
  • Unums können in Bezug auf Zeit und Stromverbrauch teuer sein.
  • Jede Berechnung im Unum-Raum ändert wahrscheinlich die Bitlänge der Struktur. Dies erfordert entweder das Entpacken in einen Bereich mit fester Größe oder die Datenzuweisung, die Aufhebung der Zuweisung und die Garbage Collection während unum-Operationen, ähnlich den Problemen beim Umgang mit Datensätzen mit variabler Länge im Massenspeicher.
  • Unums bieten nur zwei Arten von numerischen Ausnahmen, leise und signalisierende NaN (Not-a-Number).
  • Die Unum-Berechnung kann zu lockere Grenzen aus der Auswahl eines algebraisch korrekten, aber numerisch instabilen Algorithmus liefern.
  • Die Kosten und Vorteile von Unum gegenüber Gleitkomma mit kurzer Genauigkeit für Probleme, die eine geringe Genauigkeit erfordern, sind nicht offensichtlich.
  • Das Lösen von Differentialgleichungen und das Bewerten von Integralen mit Unums garantieren korrekte Antworten, sind aber möglicherweise nicht so schnell wie Methoden, die normalerweise funktionieren.

Siehe auch

Verweise

Weiterlesen

Externe Links