Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
teknopedia

teknopedia

teknopedia

teknopedia

teknopedia
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Fused multiply-add – Wikipedia
Fused multiply-add – Wikipedia
aus Wikipedia, der freien Enzyklopädie

Die Fused-multiply-add-Operation (FMA-Operation) ist eine Variante der Multiply-Accumulate-Operation (MAC) für Gleitkommazahlen und wird auf manchen Mikroprozessoren mit Gleitkommaeinheit für optimierte Berechnungen eingesetzt. Im Gegensatz zu der gewöhnlichen, im englischen auch als Unfused-multiply-add bezeichneten Operation führt die Fused-multiply-add-Operation die Berechnung mit voller Auflösung durch und rundet das Ergebnis erst am Ende der Berechnung.

Entwickelt wurde die Technologie bereits Ende der 1980er Jahre von IBM Research,[1] fand zunächst jedoch nur geringe Verbreitung. Mit fortschreitender Integrationsdichte wurde eine einfache Implementierung der FMA-Technologie in GPUs, DSPs und CPUs möglich. Die FMA-Operation ist im Standard IEEE 754-2008 festgelegt.

Anwendung

[Bearbeiten | Quelltext bearbeiten]

In numerischen Algorithmen treten häufig Operationen der Form

  a ← a + ( b ⋅ c ) {\displaystyle \ a\leftarrow a+(b\cdot c)} {\displaystyle \ a\leftarrow a+(b\cdot c)}

auf. Dies ist unter anderem bei der Auswertung von Skalarprodukten, bei Matrix-Operationen und bei der numerischen Integration der Fall.

Bei der herkömmlichen Unfused-multiply-add-Operation mit N Stellen wird dabei zunächst das Produkt b·c berechnet, dieses auf N Stellen gerundet, danach die Addition von a ausgeführt und das Endergebnis nochmal auf N Stellen gerundet. Bei der fused-multiply-add-Operation entfällt das Runden nach der Multiplikation, es wird der Ausdruck a+b·c mit voller Genauigkeit berechnet und erst am Schluss einmalig auf N finale Stellen gerundet. Damit verbunden ist bei der Fused-multiply-add-Operation ein geringfügig höherer Hardwareaufwand. In manchen Situationen reduzieren sich etwas die Rundungsfehler. Bei der klassischen Skalarprodukt-Berechnung ist dies allerdings nur sehr selten der Fall, da meist |a| >> |b·c| ist. Dort gewinnt man mit anderen Techniken weitaus mehr Genauigkeit (z. B. durch das Nutzen von 4 oder 8 Akkumulatoren und einer finalen horizontalen Summe).

Zur Auswertung werden ohne FMA mindestens drei verschiedene Anweisungen benötigt:

  • Laden von 'b' und 'c' in Register (Bedingung: 'b' und 'c' liegen nicht schon in Registern vor und die CPU unterstützt keine Speicheroperanden)
  • Multiplikation von 'b' und 'c'
  • Zwischenspeichern dieses Ergebnisses in einem Register
  • Laden von 'a' in den Akkumulator (Bedingung: 'a' liegt nicht schon in einem Register vor und die CPU unterstützt keine Speicheroperanden)
  • Addition von 'a' mit dem zuvor zwischengespeicherten Produkt '(b·c)'.

Falls für Operationen der Form   a ← a + ( b ⋅ c ) {\displaystyle \ a\leftarrow a+(b\cdot c)} {\displaystyle \ a\leftarrow a+(b\cdot c)} spezielle Opcodes definiert sind, so erfolgt die Auswertung durch eine optimierte Recheneinheit, dem Multiplier–Accumulator (MAC), der diese Anweisung in einem Schritt ausführt. Es verbleiben vom obigen Schema nur noch zwei Instruktionen, nämlich das Laden der Operanden und die anschließende FMA-Instruktion.

Vorteile

[Bearbeiten | Quelltext bearbeiten]
  • gesteigerte Gleitkommaleistung durch Verwendung der MAC[2]
  • verbesserte Ausnutzung von Registern, kompakter Maschinencode
  • erhöhte Präzision gegenüber der Realisierung mit zwei Instruktionen

Nachteile

[Bearbeiten | Quelltext bearbeiten]
  • die FMA-Technik muss durch Compiler unterstützt werden; der so erzeugte Maschinencode benötigt nun Opcodes, die von den üblichen 2-Adress- oder 3-Adress-Schemata abweichen. Die Optimierung zur Nutzung von FMA verlangt von Programmierern bisweilen einiges Fingergeschick und auch explizites Eingreifen.[3]

Implementierungen

[Bearbeiten | Quelltext bearbeiten]
  • AMD Radeon HD 5000 (und nachfolgende Architekturen)[4]
  • ARM VFPv4[5]
  • IBM RISC System/6000 (1990)[6]
  • HP PA-8000 (1996) und später
  • SCE-Toshiba Emotion Engine (1999)
  • Intel Itanium (2001)
  • Intel Core, siehe FMA x86
  • nVidia GT200 (und nachfolgende Architekturen)[7]
  • STI Cell (2006)
  • Fujitsu SPARC64 VI (2007) und später
  • AMD Bulldozer (2011), siehe auch FMA4
  • AMD Zen/Ryzen (2017)

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. ↑ R. K. Montoye, E. Hokenek, S. L. Runyon: Design of the IBM RISC System/6000 floating-point execution unit. In: IBM Journal of Research and Development. 34. Jahrgang, Nr. 1, Januar 1990, ISSN 0018-8646, S. 59–70, doi:10.1147/rd.341.0059 (ibm.com). 
  2. ↑ Eric Charles Quinnell: Floating-Point Fused Multiply-Add Architectures. The University of Texas, Austin Mai 2007 (utexas.edu [PDF; 4,4 MB; abgerufen am 5. Mai 2024]). 
  3. ↑ Christoph Peters: fma: A faster, more accurate instruction. In: Moments in Graphics. 1. Dezember 2021, abgerufen am 4. Mai 2024 (englisch). 
  4. ↑ Michael Fried: GPGPU Architecture And Performance Comparison of ATI and NVidia GPUs. (PDF; 4,4 MB) In: microway.com. Juni 2010, S. 2, abgerufen am 5. Mai 2024 (englisch). 
  5. ↑ VFPv4 architecture hardware support. In: Arm Developer. Abgerufen am 5. Mai 2024 (englisch). 
  6. ↑ V. Arunachalam, Alex Noel Joseph Raj, Naveen Hampannavar, C.B. Bidul: Efficient dual-precision floating-point fused-multiply-add architecture. In: Microprocessors and Microsystems. Band 57, März 2018, S. 23–31, hier S. 23, doi:10.1016/j.micpro.2017.12.009. 
  7. ↑ NVIDIA’s Next Generation CUDATM Compute Architecture: Fermi. (PDF; 856 kB) In: nvidia.com. 2009, S. 8, abgerufen am 5. Mai 2024 (englisch). 
Abgerufen von „https://de.teknopedia.teknokrat.ac.id/w/index.php?title=Fused_multiply-add&oldid=254486592“
Kategorien:
  • Prozessorarchitektur nach Befehlssatz
  • Computerarithmetik
Versteckte Kategorie:
  • Wikipedia:Vorlagenfehler/Vorlage:Cite journal/temporär

  • indonesia
  • Polski
  • العربية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصرى
  • Nederlands
  • 日本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українська
  • Tiếng Việt
  • Winaray
  • 中文
  • Русский
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id