[Tutor] Loop comparison

Christian Witts cwitts at compuscan.co.za
Fri Apr 16 10:46:03 CEST 2010


Alan Gauld wrote:
> "Stefan Behnel" <stefan_ml at behnel.de> wrote
>>     import cython
>>
>>     @cython.locals(result=cython.longlong, i=cython.longlong)
>>     def add():
>>         result = 0
>>         for i in xrange(1000000000):
>>             result += i
>>         return result
>>
>>     print add()
>>
>> This runs in less than half a second on my machine, including the 
>> time to launch the CPython interpreter. I doubt that the JVM can even 
>> start up in that time.
>
> I'm astonished at these results. What kind of C are you using. Even in 
> assembler I'd expect the loop/sum to take at least 3s
> on a quad core 3GHz box.
>
> Or is cython doing the precalculation optimisations you mentioned?
> And if so when does it do them? Because surely, at some stage, it 
> still has to crank the numbers?
>
> (We can of course do some fancy math to speed this particular sum up 
> since the result for any power of ten has a common pattern, but I 
> wouldn't expect the compiler optimiser to be that clever)
>
>

The precalculation optimisations are taking place.  If you pass it an 
argument to use for the upper limit of the sequence the calculation time 
shoots up.

-- 
Kind Regards,
Christian Witts




More information about the Tutor mailing list