<?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=Multiply-Accumulate</id>
	<title>Multiply-Accumulate - 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=Multiply-Accumulate"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Multiply-Accumulate&amp;action=history"/>
	<updated>2026-05-27T01:23:02Z</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=Multiply-Accumulate&amp;diff=29067&amp;oldid=prev</id>
		<title>imported&gt;Hoelzeli: Ein &quot;das&quot; zu viel</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Multiply-Accumulate&amp;diff=29067&amp;oldid=prev"/>
		<updated>2024-12-04T16:22:19Z</updated>

		<summary type="html">&lt;p&gt;Ein &amp;quot;das&amp;quot; zu viel&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{lang|en|&amp;#039;&amp;#039;&amp;#039;Multiply-Accumulate&amp;#039;&amp;#039;&amp;#039;}} (kurz: &amp;#039;&amp;#039;MAC&amp;#039;&amp;#039;) oder &amp;#039;&amp;#039;&amp;#039;Multiply-Add&amp;#039;&amp;#039;&amp;#039; (kurz:  &amp;#039;&amp;#039;MAD&amp;#039;&amp;#039;) ist eine Rechenoperation, bei der zwei Faktoren multipliziert und das Produkt zu einem fortlaufenden Summanden ([[Akkumulator (Computer)|Akkumulator]]) addiert wird:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\ a \leftarrow a + ( b \cdot c )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Operation wird intensiv bei der [[Digitale Signalverarbeitung|Verarbeitung digitaler Signale]] genutzt. Die Abkürzung MAC wird oft als Maßeinheit für die Leistungsfähigkeit solcher Systeme verwendet.&lt;br /&gt;
&lt;br /&gt;
In [[FPGA]]s sowie [[Anwendungsspezifische integrierte Schaltung|ASICs]] wird diese Operation als Teil von DSP-Blöcken (Hardwareeinheiten) bereitgestellt;&amp;lt;ref name=&amp;quot;MEYERBAESE&amp;quot;&amp;gt;Uwe Meyer-Baese: &amp;#039;&amp;#039;Digital Signal Processing with Field Programmable Gate Arrays&amp;#039;&amp;#039;, [[Springer Science+Business Media|Springer Verlag]], 2014. S. 124ff [[doi:10.1007/978-3-642-45309-0]]&amp;lt;/ref&amp;gt; als [[Maschinenbefehl]] ist sie seit den 1980er Jahren in vielen [[Signalprozessor (Hardware)|Signalprozessoren]] wie auch seit Anfang der 2000er Jahre in konventionellen [[Hauptprozessor|CPUs]] zu finden. [[Fused multiply-add|Fused Multiply-Accumulate]] ist ein Multiply-Accumulate Befehl mit höherer Rechengenauigkeit.&lt;br /&gt;
&lt;br /&gt;
Durch die Erweiterung des Hardware-Multiplizierers um den Akkumulator können Prozessoren die vollständige Operation oft genauso schnell wie eine klassische Multiplikation ausführen. Übliche Ausführungszeiten sind z.&amp;amp;nbsp;B. 2 Takte (40&amp;amp;nbsp;ns) beim [[TMS320|TMS320C40]] von [[Texas Instruments]] mit 50&amp;amp;nbsp;MHz Taktfrequenz und 5 Takte (2 ns) bei einem [[Intel-Haswell-Mikroarchitektur|Intel Haswell]] mit 2,5&amp;amp;nbsp;GHz Taktfrequenz. FPGAs können die Operation bis zu einigen 100&amp;amp;nbsp;MHz in einem Taktzyklus ausführen.&lt;br /&gt;
&lt;br /&gt;
Multiply-Accumulate-Befehle werden u.&amp;amp;nbsp;a. für [[Digitales Filter|digitale Filter]] und andere schnelle Berechnungen in der digitalen [[Bildverarbeitung]], der Dekodierung von Videos und der [[Regelungstechnik]] eingesetzt. Die Akkumulation entspricht dabei der oft benötigten [[Integration (Mathematik)|Integration]], die Multiplikation berücksichtigt ein [[Differential (Mathematik)|Differential]] oder bewirkt eine [[Gewichtung]].&lt;br /&gt;
&lt;br /&gt;
Die Argumente und das Ergebnis dieser Operation können je nach Prozessortyp und gewähltem Datentyp&lt;br /&gt;
* [[Integer (Datentyp)|Integer]]-Zahlen ([[Motorola 56001|Motorola DSP56K]]),&lt;br /&gt;
* [[Festkommazahl|Festkomma]]-Zahlen (kein Typ bekannt),&lt;br /&gt;
* einfach genaue [[Gleitkommazahl|Gleitkomma]]-Zahlen (TI TMS320C30/40, [[Altivec]], Intel Haswell) oder&lt;br /&gt;
* doppelt genaue [[Gleitkommazahl|Gleitkomma]]-Zahlen (Intel Haswell) sein&lt;br /&gt;
* 42 Bit Integer (FPGAs)&lt;br /&gt;
&lt;br /&gt;
== Genauigkeit ==&lt;br /&gt;
{{Hauptartikel|Fused multiply-add}}&lt;br /&gt;
Bei der MAC-Operation kann eine Verbesserung der Genauigkeit im finalen Ergebnis erzielt werden, indem die notwendige Rundung erst am Ende der MAC-Operation ausgeführt wird und die Zwischenergebnisse intern mit voller Auflösung ohne Rundungen durchgeführt werden. Diese Operation wird auch als {{EnS|&amp;#039;&amp;#039;Fused Multiply Accumulate&amp;#039;&amp;#039;}}, abgekürzt FMA oder FMAC, bezeichnet. Die FMAC-Operation bedingt, im Gegensatz zur MAC-Operation, breitere Datenpfade und damit verbunden einen erhöhten Hardwareaufwand.&amp;lt;ref name=&amp;quot;quinnell&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Geschwindigkeit ==&lt;br /&gt;
Der Geschwindigkeitszuwachs kann bis zu 100 % betragen. So dauert in vielen DSPs der Multiply-Accumulate-Befehl genauso lange wie eine einzelne Addition oder eine einzelne Multiplikation (Beispiel: Texas Instruments TMS320C40). Der Geschwindigkeitszuwachs beim Intel Haswell ist geringer. Ein Multiply-Accumulate-Befehl dauert 5 Takte, eine einzelne Multiplikation 5 Takte und eine einzelne Addition 3 Takte, was zusammen 8 Takte ergibt und bei optimalem Einsatz ein Gewinn von 60 % bringt.&lt;br /&gt;
&lt;br /&gt;
Auf der anderen Seite ist der Multiply-Accumulate-Befehl häufig der kritischste Befehl (kritischer Pfad) und begrenzt die Taktfrequenz nach oben. Ein weiteres Problem ist, dass man es in der Praxis sehr häufig mit Operationen zu tun hat, die die Form&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\ z \leftarrow a + ( b \cdot c ) \cdot s&amp;lt;/math&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;mit&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;math&amp;gt;s = \pm 0{,}5,\,\, \pm 1,\,\, \pm 2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
benötigen würden.&lt;br /&gt;
* Es wird häufig keine Addition, sondern eine Subtraktion des Produkts benötigt (Aufwand: Ein [[Exklusiv-Oder-Gatter]] für das Vorzeichen von &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; oder &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;).&lt;br /&gt;
* Genauso häufig sind Skalierungen mit den Faktoren 0,5 oder 2 notwendig (Aufwand: Inkrement oder Dekrement für den Exponenten von &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; oder &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;).&lt;br /&gt;
* Es wird eine 4-Operanden-Form benötigt, da &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; nicht zerstört werden darf.&lt;br /&gt;
&lt;br /&gt;
Im ersten Fall ist die MAC-Anweisung häufig nicht verwendbar, obwohl sie ein Exklusiv-Oder-Gatter von der benötigten Lösung entfernt ist. Im zweiten Fall bringt der MAC-Befehl einen deutlichen Nutzen, leider verbleibt eine Trivialoperation. Der dritte Fall wurde von AMD mit [[FMA x86#CPUs mit FMA4|FMA4]] adressiert, weiterhin lässt er sich durch [[Registerumbenennung]] heutiger CPUs meist verstecken.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
* Approximation des Kehrwertes von a mit dem [[Newton-Raphson-Verfahren]]: &amp;lt;math&amp;gt;x&amp;#039; = x \cdot (\underline{2 - a \cdot x})&amp;lt;/math&amp;gt;&lt;br /&gt;
* Approximation der reziproken Wurzel von a mit dem [[Newton-Raphson-Verfahren]]: &amp;lt;math&amp;gt;x&amp;#039; = x \cdot (\underline{1{,}5 - 0{,}5 \cdot a \cdot (x^2)})&amp;lt;/math&amp;gt;&lt;br /&gt;
* Komplexwerte Multiplikation: &amp;lt;math&amp;gt;r = \underline{(r_1 r_2) - i_1 i_2},\,\, i = r_1 i_2 + r_2 i_1&amp;lt;/math&amp;gt;&lt;br /&gt;
* Iteration der [[Julia-Menge]]: &amp;lt;math&amp;gt;r_{n+1} = r_n^2 \underline{- i_n^2 + r_0},\,\,  i_{n+1} = \underline{2 r_n i_n + i_0}&amp;lt;/math&amp;gt;&lt;br /&gt;
* Approximation von Funktionen mittels Reihenentwicklung bis zum quadratischen Term&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;quinnell&amp;quot;&amp;gt;{{Internetquelle | url= https://repositories.lib.utexas.edu/bitstream/handle/2152/3082/quinnelle60861.pdf | titel= Floating-Point Fused Multiply–Add Architectures | autor= Eric Quinnell | hrsg= | datum= 2007 | zugriff=2013-07-25 | format= PDF; 4,4&amp;amp;nbsp;MB}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Digitale Schaltungstechnik]]&lt;br /&gt;
[[Kategorie:Computerarithmetik]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Hoelzeli</name></author>
	</entry>
</feed>