Forum: Compiler & IDEs Multiplizieren von 128 Bit Zahlen


von matthias (Gast)


Lesenswert?

Hi,
Ich wollte mittels der ymm register z.b. mit Hilfe vpmuludq 2 128  bit 
Zahlen multiplizieren.
Es gibt bei den AVX2 Befelen immer das Problem des overflows an der 64 
bit Grenze, der nicht berücksichtigt wird, keine Flags gesetzt.
Ich suche einen Trick:
Ich kann ja 4 32 Bit Zahlen in einer ymm unterbringen und es geschieht 
dword(0)*dword(0)->qword(0)
dword(3)*dword(3)->qword(1)
dword(5)*dword(5)->qword(2)
dword(7)*dword(5)->qword(3)

also

DEST[63:0] ← SRC1[31:0] * SRC2[31:0]
DEST[127:64] ← SRC1[95:64] * SRC2[95:64
DEST[191:128] ← SRC1[159:128] * SRC2[159:128]
DEST[255:192] ← SRC1[223:192] * SRC2[223:192]

siehe http://www.felixcloutier.com/x86/PMULUDQ.html

also z.b. 0c0908af.234698ab.1b07ec09.209b3231 (4*32 =128Bit)

mal  1d0918af.334699ab.7b08eDa0.219f3e56

verteilen auf

00000000.0c0908af.00000000.234698ab.00000000.1b07ec09.00000000.209b3231
mal
00000000.1d0918af.00000000.334699ab.00000000.7b08eDa0.00000000.219f3e56

(jeweils) werden die 4 relevanten dwords Produkte in die 4 64 bit qwords 
des Ergebnis-ymm Registers reingerechnet.
Das gibt dann 4 qwords. Ich habs jetzt nich händisch ausgerechnet also 
eine 256 Bit Zahl im Ergebnisregister.
Und dann, wenn das soweit richtig ist, habe ioch dort etwas was aber 
noch nicht das richtige ist, sondern man muss noch irgendwie horizontal 
addieren. Mit Vpaddq denk ich...

Ich weiss es eben nicht.
Hat das nicht jemmand mal programmiert? In x86 Pentium mit AVX2 
extension, oder evtl AVX4.2.
Mir würde auch Produkt 2er 64 Bit words reichen..
Es ist knifflich...
Vielen Dank

von Alex (Gast)


Lesenswert?

und funktioniert nicht mul rax,rbx ->rdx:rax ? Auch in 64-bit modus mit 
dem prefix rex.w kann man noch mul verwenden :)  (Volume 2B Intel 64 and 
IA-32 Programmers reference) :).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.