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.