Compiler optimizations (I'm baffled)
Dave
Dave_member at pathlink.com
Wed May 3 12:52:59 PDT 2006
Dave wrote:
> Bruno Medeiros wrote:
>> Walter Bright wrote:
>>> Craig Black wrote:
>>>> This is
>>>> because integer division is essentially floating point division
>>>> under the
>>>> hood.
>>>
>>> Not exactly. What is true is that both kinds of division are based on
>>> the same 'shift and subtract' method (the same algorithm taught in
>>> 3rd grade for doing long division). If you're really interested in
>>> exactly how integer and floating point division work, get the Digital
>>> Mars CD which has complete source code to an IEEE 754 floating point
>>> emulator, as well as code to do integer division for long's.
>>>
>>> www.digitalmars.com/shop.html
>>
>> I ran these tests and I got basicly the same results (the int division
>> is slower). I am very intrigued and confused. Can you (or someone
>> else) explain briefly why this is so?
>> One would think it would be the other way around (float being slower)
>> or at least the same speed.
>>
>
> If you take a look at the assembly for div(), idiv is being executed
> twice - once for the division and once for the modulo. If you replace
> the modulo with the explicit calculation then the perf. will improve a
> lot because imul & sub is faster than idiv.
>
Obviously I was talking about the original pi.d implementation that's
using the int modulo operator in the div() function:
quotient = b / divisor;
//remainder = b % divisor;
remainder = b - quotient * divisor; // a lot faster
> It'd be nice if dmd would do this optimization for us because
> calculating the integer quotient and subsequent remainder for the same
> dividend and divisor would seem to be pretty common operations.
Don't get me wrong - dmd does great for integer stuff IMHO, this is just
one small issue I've noticed...
More information about the Digitalmars-d
mailing list