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