PS: Write your code in a file and compile it with "cython -a myfile.pyx", 
that generates a html file with explanations.




On Thursday, October 20, 2016 at 1:11:14 AM UTC+2, Volker Braun wrote:
>
> Thats the expected behavoir. Without type annotation, cython just does the 
> same as Python (create a list of 10**8 elements and iterate over). With 
> type annotation it is a C-level for loop.
>
>
> On Thursday, October 20, 2016 at 12:33:47 AM UTC+2, Sébastien Labbé wrote:
>>
>> Dear sage-devel,
>>
>> Writing cython code, I was having a problem with memory leaks, and I 
>> managed to simplify the problem to a simple for loop computing a sum.
>>
>> If the loop variable a is cdef, everything is fine:
>>
>> sage: %%cython
>> ....: def test_with_cdef_a(int N):
>> ....:     cdef long S = 0
>> ....:     cdef int a
>> ....:     for a in range(1, N):
>> ....:         sig_check() # Check for Keyboard interupt
>> ....:         S += a
>> ....:     return S
>> ....:
>> sage: %time test_with_cdef_a(10**8)      # fast, takes no memory, great
>> CPU times: user 103 ms, sys: 2.64 ms, total: 105 ms
>> Wall time: 106 ms
>> 4999999950000000
>>
>> As expected, if I forget the "cdef int a" line, it takes longer. But most 
>> surprisingly, it uses a *lot* of memory during the computation (40%) and 
>> not all of the memory is freed after he computation (30%).
>>
>> sage: %%cython
>> ....: def test_no_cdef_a(int N):
>> ....:     cdef long S = 0
>> ....:     for a in range(1, N):
>> ....:         sig_check() # Check for Keyboard interupt
>> ....:         S += a
>> ....:     return S
>> ....:
>> sage: %time test_no_cdef_a(10**8)        # this takes a lot of memory 
>> (40%)  + memory leaks (30% of the memory after computation)
>> CPU times: user 8.36 s, sys: 787 ms, total: 9.14 s
>> Wall time: 9.24 s
>> 4999999950000000
>> sage: %time test_no_cdef_a(10**9)        # this takes a lot of memory 
>> (all of it, starts swaping)
>>
>> I am using:
>>
>> $ sage -cython -V 
>> Cython version 0.24.1
>> $ sage -version   
>> SageMath version 7.4.beta6, Release Date: 2016-09-24
>>
>> Are you able to reproduce?
>>
>> Sébastien
>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to