PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SIMD Int-Division


Matti
2004-06-03, 14:50:10
wie ich eben festgestellt habe, kann weder MMX noch SSE noch SSE2 Int-Division. Gibts vielleicht irgendeinen genialen Algoritmus, wo man mit << >> + - und * effizient dividieren kann?

mrdigital
2004-06-03, 15:15:28
Original geschrieben von Matti
wie ich eben festgestellt habe, kann weder MMX noch SSE noch SSE2 Int-Division. Gibts vielleicht irgendeinen genialen Algoritmus, wo man mit << >> + - und * effizient dividieren kann?
mit shift kannst du Potenzen von 2 multiplizieren und dividieren. D.h. Faktorzerlegung deines Divisors (das Ding durch das du teilst, ich kann Divisor und Divident nie auseinander halten ;)) und alle Zweierfaktoren schieben und dann den Rest mit Abziehen abwickeln.

HajottV
2004-06-03, 15:24:26
Original geschrieben von Matti
wie ich eben festgestellt habe, kann weder MMX noch SSE noch SSE2 Int-Division. Gibts vielleicht irgendeinen genialen Algoritmus, wo man mit << >> + - und * effizient dividieren kann?

Wo liegt das Problem? Normale Division und dann CVTTPS2DQ.

Gruß

Jörg

Matti
2004-06-03, 15:43:20
@mrdigital
...da kommt man wahrscheinlich schneller, wenn man die Zahlen der ALU übergibt.

@HajottV
was ist CVTTPS2DQ? ...ist das int<->float-Umrechnung? ...würde gehen, aber wenn man 32-Bit-Ints in 32-Bit-Floats umwandelt, ist das Ergebnis nicht mehr 100%ig genau.

mrdigital
2004-06-03, 15:45:09
Original geschrieben von Matti
@mrdigital
...da kommt man wahrscheinlich schneller, wenn man die Zahlen der ALU übergibt.

@HajottV
was ist CVTTPS2DQ? ...ist das int<->float-Umrechnung? ...würde gehen, aber wenn man 32-Bit-Ints in 32-Bit-Floats umwandelt, ist das Ergebnis nicht mehr 100%ig genau.
nur wenn du mit 32bit Zahlen rechnest, wenn du aber mal mit 1024bit Zahlen rechnest, hilft dir die DIV Fähigkeit der ALU nichts mehr...

Matti
2004-06-03, 15:47:18
...das stimmt :) aber ich brauche keine 1024-Bit!

HajottV
2004-06-04, 09:51:16
Original geschrieben von Matti
was ist CVTTPS2DQ? ...ist das int<->float-Umrechnung? ...würde gehen, aber wenn man 32-Bit-Ints in 32-Bit-Floats umwandelt, ist das Ergebnis nicht mehr 100%ig genau.

Der Befehl rundet nach 0 hin ab, was dann dem Verhalten einer Integerdivision entspricht.

Wenn Float nicht genau genug ist, nimm halt Double und CVTTPD2PI.

Gruß

Jörg