Multiply-Accumulate - LinkFang.de





Multiply-Accumulate


Ein Multiply-Accumulate-Befehl (kurz: MAC) oder Multiply-Add (kurz: MAD) ist ein Befehl, der zwei Faktoren multipliziert und das entstehende Produkt zu einem weiteren Summanden (Akkumulator) addiert. Der Befehl ist seit den 1980er Jahren in vielen Signalprozessoren wie auch seit Anfang der 2000er Jahre in konventionellen CPUs zu finden. Fused Multiply-Accumulate ist ein Multiply-Accumulate Befehl mit höherer Rechengenauigkeit.

Er kann die Anweisung:

[math]\ a \leftarrow a + ( b \cdot c )[/math]

durch eine Erweiterung des Hardware-Multiplizierers genauso schnell wie eine klassische Multiplikation ausführen – übliche Ausführungszeiten sind z. B. 2 Takte (40 ns) beim TMS320C40 von Texas Instruments mit 50 MHz Taktfrequenz und 5 Takten (2 ns) beim aktuellen Intel Haswell mit z. B. 2,5 GHz Taktfrequenz.

Entgegen üblichen Darstellungen sind Multiply-Accumulate-Befehle auch für Berechnungen abseits der Haupteinsatzbereiche wie für die digitale Bildverarbeitung, Dekodierung von Videos, digitaler Filter und Regelungstechnik verwendbar.

Die Argumente und das Ergebnis dieser Operation können je nach Prozessortyp und gewähltem Datentyp

Genauigkeit

Hauptartikel: Fused multiply-add

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 englisch Fused Multiply Accumulate, abgekürzt FMA oder FMAC, bezeichnet. Die FMAC-Operation bedingt, im Gegensatz zur MAC-Operation, breitere Datenpfade und damit verbunden einen erhöhten Hardwareaufwand.[1]

Geschwindigkeit

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.

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

[math]\ z \leftarrow a + ( b \cdot c ) \cdot s[/math]    mit    [math]s = \pm 0{,}5,\,\, \pm 1,\,\, \pm 2[/math].

benötigen würden.

  • Es wird häufig keine Addition, sondern eine Subtraktion des Produkts benötigt (Aufwand: Ein XOR-Gatter für das Vorzeichen von b oder c).
  • Genauso häufig sind Skalierungen mit den Faktoren 0,5 oder 2 notwendig (Aufwand: Inkrement oder Dekrement für den Exponenten von b oder c).
  • Es wird eine 4-Operanden-Form benötigt, da [math]a[/math] nicht zerstört werden darf.

Im ersten Fall ist die MAC-Anweisung häufig nicht verwendbar, obwohl sie ein XOR-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 FMA4 adressiert, weiterhin lässt er sich durch das Registerumbenennung heutiger CPUs meist verstecken.

Beispiele:

  • Approximation des Kehrwertes von a mit dem Newton-Raphson-Verfahren: [math]x' = x \cdot (\underline{2 - a \cdot x})[/math]
  • Approximation der reziproken Wurzel von a mit dem Newton-Raphson-Verfahren: [math]x' = x \cdot (\underline{1.5 - 0.5 \cdot a \cdot (x^2)})[/math]
  • Komplexwerte Multiplikation: [math]r = \underline{(r_1 r_2) - i_1 i_2},\,\, i = r_1 i_2 + r_2 i_1[/math]
  • Selbst die Iteration der Juliamenge: [math]r_{n+1} = r_n^2 \underline{- i_n^2 + r_0},\,\, i_{n+1} = \underline{2 r_n i_n + i_0}[/math]
  • Funktionsapproximation mittels Reihenentwicklung bis zum quadratischen Term

Einzelnachweise

  1. Eric Quinnell: Floating-Point Fused Multiply–Add Architectures. 2007, abgerufen am 25. Juli 2013 (PDF; 4,4 MB).

Kategorien: Digitale Schaltungstechnik | Computerarithmetik

Quelle: Wikipedia - http://de.wikipedia.org/wiki/Multiply-Accumulate (Vollständige Liste der Autoren des Textes [Versionsgeschichte])    Lizenz: CC-by-sa-3.0

Änderungen: Alle Bilder mit den meisten Bildunterschriften wurden entfernt. Ebenso alle zu nicht-existierenden Artikeln/Kategorien gehenden internen Wikipedia-Links (Bsp. Portal-Links, Redlinks, Bearbeiten-Links). Entfernung von Navigationsframes, Geo & Normdaten, Mediadateien, gesprochene Versionen, z.T. ID&Class-Namen, Style von Div-Containern, Metadaten, Vorlagen, wie lesenwerte Artikel. Ansonsten sind keine Inhaltsänderungen vorgenommen worden. Weiterhin kann es durch die maschinelle Bearbeitung des Inhalts zu Fehlern gerade in der Darstellung kommen. Darum würden wir jeden Besucher unserer Seite darum bitten uns diese Fehler über den Support mittels einer Nachricht mit Link zu melden. Vielen Dank!

Stand der Informationen: August 201& - Wichtiger Hinweis: Da die Inhalte maschinell von Wikipedia übernommen wurden, ist eine manuelle Überprüfung nicht möglich. Somit garantiert LinkFang.de nicht die Richtigkeit und Aktualität der übernommenen Inhalte. Sollten die Informationen mittlerweile fehlerhaft sein, bitten wir Sie darum uns per Support oder E-Mail zu kontaktieren. Wir werden uns dann innerhalb von spätestens 10 Tagen um Ihr Anliegen kümmern. Auch ohne Anliegen erfolgt mindestens alle drei Monate ein Update der gesamten Inhalte.