Basics: multiplication overflow

Gast #834246
Guten Abend Freunde,


ich arbeite gerade an einem Vektorprozessor (SIMD). Da habe ich ein 
Problem mit der Multiplikation. Ich habe 16-bit Daten. Die 
Multiplikation passt in 32-bit Bereich. Ich habe aber nur 16-bit zur 
Verfügung. D.h. die Multiplikation liefert nur die LSBs als Ergebnis und 
im Falle eines Overflows erfolgt wrap-around.

Was kann ich an der Stelle machen? Ich habe mit Schiebe-Operatoren 
versucht. Aber die Ergebnisse waren trotzdem nicht richtig :-(

Zum veranschaulichen des Problems:

short A1,A2,B1,B2;
int A,B;

Packing erfolgt hier:
A = (A1,A2);
B = (B1,B2);


C = mul(A,B);

C sieht so aus: C = (A1*B1,A2*B2)

Ich hoffe, das ist verständlich.
#834257
Deine Architektur kenne ich leider nicht. Aber im Notfall sollte 
Folgendes gehen:
1
zu berechnen: x * y
2

3
x = 256 * a + b // x und y in je zwei 8-Bit-Werte zerlegen
4
y = 256 * c + d
5

6
x * y = (256 * a + b) * (256 * c + d)
7
      = 65536 * a * c + 256 * (a * d + b * c) + b * d
8
      = a*c << 16 + (a*d + b*c) << 8 + b*d
(hoffe, ich habe mich nicht vertippt)

d.h. du formst die 16x16-Multiplikation in vier 8x8-Multiplikationen und 
ein paar Addidionen um.
Gast #834293
Hi Kai,


danke für die schnelle Antwort. Ist das aber nicht rechenintensiv? Ich 
soll bei meiner Aufgabe Leistungsverbrauch minimieren, d.h. Arbeitzyklen 
reduzieren. Deshalb musste ich den Vektorprozessor nehmen, weil ja auf 
eine Datenmenge parallel die gleiche Operation angewendet werden kann 
(SIMD).

Ich probiere deine Lösung und schau, wie das Ergebnis aussieht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.