<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Fused_multiply-add</id>
	<title>Fused multiply-add - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Fused_multiply-add"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Fused_multiply-add&amp;action=history"/>
	<updated>2026-06-02T14:44:25Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Fused_multiply-add&amp;diff=2596457&amp;oldid=prev</id>
		<title>imported&gt;Ulanwp: 3 fehlende Sprachparameter eingefügt; 2 Datumsparameter konvertiert</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Fused_multiply-add&amp;diff=2596457&amp;oldid=prev"/>
		<updated>2026-03-05T06:55:52Z</updated>

		<summary type="html">&lt;p&gt;3 fehlende Sprachparameter eingefügt; 2 Datumsparameter konvertiert&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Die &amp;#039;&amp;#039;&amp;#039;Fused-multiply-add&amp;#039;&amp;#039;&amp;#039;-Operation (FMA-Operation) ist eine Variante der [[Multiply-Accumulate]]-Operation (MAC) für [[Gleitkommazahl]]en und wird auf manchen [[Mikroprozessor]]en mit Gleitkommaeinheit für optimierte Berechnungen eingesetzt. Im Gegensatz zu der gewöhnlichen, im englischen auch als &amp;#039;&amp;#039;Unfused-multiply-add&amp;#039;&amp;#039; 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.&lt;br /&gt;
&lt;br /&gt;
Entwickelt wurde die Technologie bereits Ende der 1980er Jahre von [[IBM|IBM Research]],&amp;lt;ref&amp;gt;{{cite journal |first1=R. K. |last1=Montoye |first2=E. |last2=Hokenek |first3=S. L. |last3=Runyon |date=1990-01 |title=Design of the IBM RISC System/6000 floating-point execution unit |journal=IBM Journal of Research and Development |volume=34 |issue=1 |pages=59–70 |doi=10.1147/rd.341.0059 |issn=0018-8646 |url=http://domino.research.ibm.com/tchjr/journalindex.nsf/4ac37cf0bdc4dd6a85256547004d47e1/e3d1d5353695231c85256bfa0067fa31?OpenDocument |language=en}}&amp;lt;/ref&amp;gt; fand zunächst jedoch nur geringe Verbreitung. Mit fortschreitender [[Integrationsdichte]] wurde eine einfache Implementierung der FMA-Technologie in [[Grafikprozessor|GPU]]s, [[Digitaler Signalprozessor|DSP]]s und CPUs möglich. Die FMA-Operation ist im Standard [[IEEE 754-2008]] festgelegt.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
In numerischen Algorithmen treten häufig Operationen der Form&lt;br /&gt;
:&amp;lt;math&amp;gt;\ a \leftarrow a + ( b \cdot c )&amp;lt;/math&amp;gt;&lt;br /&gt;
auf. Dies ist unter anderem bei der Auswertung von [[Skalarprodukt|Skalarprodukten]], bei [[Matrix (Logik)|Matrix]]-Operationen und bei der [[Numerische Integration|numerischen Integration]] der Fall.&lt;br /&gt;
&lt;br /&gt;
Bei der herkömmlichen Unfused-multiply-add-Operation mit N&amp;amp;nbsp;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&amp;amp;nbsp;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&amp;amp;nbsp;finale Stellen gerundet. Damit verbunden ist bei der Fused-multiply-add-Operation ein geringfügig höherer Hardwareaufwand.&lt;br /&gt;
In manchen Situationen reduzieren sich etwas die Rundungsfehler. Bei der klassischen Skalarprodukt-Berechnung ist dies allerdings nur sehr selten der Fall, da meist |a| &amp;gt;&amp;gt; |b·c| ist. Dort gewinnt man mit anderen Techniken weitaus mehr Genauigkeit (z.&amp;amp;nbsp;B. durch das Nutzen von 4 oder 8&amp;amp;nbsp;Akkumulatoren und einer finalen horizontalen Summe).&lt;br /&gt;
&lt;br /&gt;
Zur Auswertung werden ohne FMA mindestens drei verschiedene Anweisungen benötigt:&lt;br /&gt;
* Laden von &amp;#039;b&amp;#039; und &amp;#039;c&amp;#039; in Register (Bedingung: &amp;#039;b&amp;#039; und &amp;#039;c&amp;#039; liegen nicht schon in Registern vor und die CPU unterstützt keine Speicheroperanden)&lt;br /&gt;
* Multiplikation von &amp;#039;b&amp;#039; und &amp;#039;c&amp;#039;&lt;br /&gt;
* Zwischenspeichern dieses Ergebnisses in einem Register&lt;br /&gt;
* Laden von &amp;#039;a&amp;#039; in den Akkumulator (Bedingung: &amp;#039;a&amp;#039; liegt nicht schon in einem Register vor und die CPU unterstützt keine Speicheroperanden)&lt;br /&gt;
* Addition von &amp;#039;a&amp;#039; mit dem zuvor zwischengespeicherten Produkt &amp;#039;(b·c)&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Falls für Operationen der Form &amp;lt;math&amp;gt;\ a \leftarrow a + ( b \cdot c )&amp;lt;/math&amp;gt; spezielle [[Opcode|Opcodes]] definiert sind, so erfolgt die Auswertung durch eine optimierte Recheneinheit, dem &amp;#039;&amp;#039;[[Multiply-Accumulate|Multiplier–Accumulator]]&amp;#039;&amp;#039; (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.&lt;br /&gt;
&lt;br /&gt;
=== Vorteile ===&lt;br /&gt;
* gesteigerte Gleitkommaleistung durch Verwendung der MAC&amp;lt;ref&amp;gt;{{Literatur |Autor=Eric Charles Quinnell |Titel=Floating-Point Fused Multiply-Add Architectures |Verlag=The University of Texas |Ort=Austin |Datum=2007-05 |Online=[https://repositories.lib.utexas.edu/server/api/core/bitstreams/53381004-0641-4bdd-bdff-1fb3519b2124/content Online] |Format=PDF |KBytes=4343 |Abruf=2024-05-05 |Sprache=en}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* verbesserte Ausnutzung von Registern, kompakter Maschinencode&lt;br /&gt;
* erhöhte Präzision gegenüber der Realisierung mit zwei Instruktionen&lt;br /&gt;
&lt;br /&gt;
=== Nachteile ===&lt;br /&gt;
* 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 &amp;#039;&amp;#039;Fingergeschick&amp;#039;&amp;#039; und auch explizites Eingreifen.&amp;lt;ref&amp;gt;{{Internetquelle |autor=Christoph Peters |url=https://momentsingraphics.de/FMA.html |titel=fma: A faster, more accurate instruction |werk=Moments in Graphics |datum=2021-12-01 |sprache=en |abruf=2024-05-04}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementierungen ==&lt;br /&gt;
* AMD Radeon HD 5000 (und nachfolgende Architekturen)&amp;lt;ref&amp;gt;{{Internetquelle |autor=Michael Fried |url=https://www.microway.com/download/whitepaper/GPGPU_Architecture_and_Performance_Comparison_2010.pdf |titel=GPGPU Architecture And Performance Comparison of ATI and NVidia GPUs |werk=microway.com |datum=2010-06 |seiten=2 |format=PDF; 4,4 MB |sprache=en |abruf=2024-05-05}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* ARM VFPv4&amp;lt;ref&amp;gt;{{Internetquelle |url=https://developer.arm.com/documentation/100302/0001/ada1426865487429 |titel=VFPv4 architecture hardware support |werk=Arm Developer |sprache=en |abruf=2024-05-05}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* IBM RISC System/6000 (1990)&amp;lt;ref&amp;gt;{{Literatur |Autor=V. Arunachalam, Alex Noel Joseph Raj, Naveen Hampannavar, C.B. Bidul |Titel=Efficient dual-precision floating-point fused-multiply-add architecture |Sammelwerk=Microprocessors and Microsystems |Band=57 |Datum=2018-03 |Seiten=23–31, hier S. 23 |DOI=10.1016/j.micpro.2017.12.009 |Sprache=en}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[Hewlett-Packard|HP]] [[PA-8000]] (1996) und später&lt;br /&gt;
* [[Sony Computer Entertainment|SCE]]-[[Toshiba]] [[Emotion Engine]] (1999)&lt;br /&gt;
* Intel [[Itanium]] (2001)&lt;br /&gt;
* Intel Core, siehe [[FMA x86]]&lt;br /&gt;
* nVidia GT200 (und nachfolgende Architekturen)&amp;lt;ref&amp;gt;{{Internetquelle |url=https://www.nvidia.com/content/PDF/fermi_white_papers/NVIDIA_Fermi_Compute_Architecture_Whitepaper.pdf |titel=NVIDIA’s Next Generation CUDATM Compute Architecture: Fermi |werk=nvidia.com |datum=2009 |seiten=8 |format=PDF; 856 kB |sprache=en |abruf=2024-05-05}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* STI [[Cell (Prozessor)|Cell]] (2006)&lt;br /&gt;
* [[Fujitsu]] [[SPARC64 VI]] (2007) und später&lt;br /&gt;
* [[AMD FX|AMD &amp;#039;&amp;#039;Bulldozer&amp;#039;&amp;#039;]] (2011), siehe auch [[FMA x86|FMA4]]&lt;br /&gt;
* [[Zen (Mikroarchitektur)|AMD Zen/Ryzen]] (2017)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Prozessorarchitektur nach Befehlssatz]]&lt;br /&gt;
[[Kategorie:Computerarithmetik]]&lt;br /&gt;
&lt;br /&gt;
[[en:Multiply–accumulate operation#Fused multiply–add]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Ulanwp</name></author>
	</entry>
</feed>