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
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.