I should have been a little less lazy before I posted this, I guess. I
found out where the leak is (the fpLLL wrapper) on my first try.  I
don't know what is causing it, though. This is now at

http://trac.sagemath.org/sage_trac/ticket/10179


On Wed, 2010-10-27 at 14:24 -0400, Jonathan Bober wrote:
> Dear all,
> 
> There seems to be a memory leak in some code below, in at least versions
> 4.5 and 4.5.3. For example, if I call it with
> 
> sage: L = find_candidates_for_large_value(5000)
> 
> It prints something like:
> 
> current memory usage: 836.73046875
> current memory usage: 836.73046875
> current memory usage: 836.73046875
> current memory usage: 836.73046875
> current memory usage: 836.73046875
> current memory usage: 836.73046875
> current memory usage: 836.73046875
> current memory usage: 836.98046875
> current memory usage: 836.98046875
> current memory usage: 836.98046875
> current memory usage: 836.98046875
> current memory usage: 836.98046875
> current memory usage: 836.98046875
> current memory usage: 836.98046875
> current memory usage: 837.23046875
> current memory usage: 837.23046875
> current memory usage: 837.23046875
> current memory usage: 837.23046875
> current memory usage: 837.23046875
> current memory usage: 837.23046875
> current memory usage: 837.23046875
> current memory usage: 837.23046875
> current memory usage: 837.23046875
> current memory usage: 837.48046875
> current memory usage: 837.48046875
> current memory usage: 837.48046875
> current memory usage: 837.48046875
> current memory usage: 837.48046875
> current memory usage: 837.48046875
> current memory usage: 837.48046875
> current memory usage: 837.48046875
> current memory usage: 837.48046875
> current memory usage: 837.48046875
> current memory usage: 837.73046875
> current memory usage: 837.73046875
> current memory usage: 837.73046875
> current memory usage: 837.73046875
> current memory usage: 837.73046875
> current memory usage: 837.73046875
> current memory usage: 837.73046875
> current memory usage: 837.73046875
> current memory usage: 837.73046875
> current memory usage: 837.98046875
> current memory usage: 837.98046875
> current memory usage: 837.98046875
> current memory usage: 837.98046875
> current memory usage: 837.98046875
> current memory usage: 837.98046875
> current memory usage: 837.98046875
> current memory usage: 837.98046875
> current memory usage: 838.2578125
> current memory usage: 838.2578125
> current memory usage: 838.2578125
> current memory usage: 838.2578125
> current memory usage: 838.2578125
> current memory usage: 838.515625
> current memory usage: 838.515625
> current memory usage: 838.515625
> current memory usage: 838.515625
> current memory usage: 838.81640625
> current memory usage: 838.81640625
> current memory usage: 838.81640625
> current memory usage: 838.81640625
> current memory usage: 838.81640625
> current memory usage: 838.81640625
> current memory usage: 838.81640625
> current memory usage: 838.81640625
> current memory usage: 838.81640625
> current memory usage: 839.06640625
> current memory usage: 839.06640625
> current memory usage: 839.1953125
> current memory usage: 839.1953125
> current memory usage: 839.1953125
> current memory usage: 839.1953125
> current memory usage: 839.1953125
> current memory usage: 839.1953125
> current memory usage: 839.1953125
> current memory usage: 839.453125
> current memory usage: 839.453125
> current memory usage: 839.453125
> current memory usage: 839.6796875
> current memory usage: 839.6796875
> current memory usage: 839.6796875
> current memory usage: 839.6796875
> current memory usage: 839.6796875
> current memory usage: 839.6796875
> current memory usage: 839.6796875
> current memory usage: 839.9375
> current memory usage: 839.9375
> current memory usage: 840.06640625
> [...]
> 
> 
> It is a little complicated, so we need a smaller example to figure out
> what is causing the memory leak. Before I try making a smaller example,
> I thought I would write here to see if anyone happens to know what is
> leaking memory, or at least to see if anyone has a good guess.
> 
> Some things used are:
> 
> prime_range()
> nth_prime()
> symbolic arithmetic
> fast_callable(domain=ComplexField(250))
> ZZ.random_element()
> RR.random_element()
> copy(MatrixSpace(ZZ, n).zero())
> A.LLL(), where A is a modification of the above copy(MatrixSpace(ZZ, 
> n).zero())
> 
> 
> import sys
> 
> def find_candidates_for_large_value(repeat=1):
>     """
>         Find values of t where zeta(1/2 + it) is expected to be big.
>     """
>     possible_t = []
>     X = var('X')
> 
>     p_start = 20
>     p_end = 40
> 
>     euler_product1 = 1
>     euler_product2 = 1
>     for p in prime_range(nth_prime(p_start) + 1):
>         euler_product1 = euler_product1 / (1 - 1/p^(1/2 + i * X))
> 
>     euler_product2 = euler_product1
> 
>     for p in prime_range(nth_prime(p_start) + 1, nth_prime(p_end) + 1):
>         euler_product2 = euler_product2 / (1 - 1/p^(1/2 + i * X))
> 
>     euler_product1 = fast_callable(euler_product1, domain=ComplexField(250), 
> vars='X')
>     euler_product2 = fast_callable(euler_product2, domain=ComplexField(250), 
> vars='X')
> 
>     for l in xrange(repeat):
>         n = ZZ.random_element(p_start, p_end)
>         m = ZZ.random_element(120, 150)
>         r = ZZ.random_element(40, 50)
>         delta = RR.random_element(.9, .9999)
> 
>         last_prime = nth_prime(n)
>         primes = prime_range(last_prime + 1)
> 
>         weights = [p^(-1/4) for p in primes]
>         #print weights
> 
>         A = copy(MatrixSpace(ZZ, n+1).zero())
>         for k in xrange(0, n):
>             A[0,k] = floor(weights[k] * primes[k].log() * 2^(m - r))
> 
>         A[0,n] = 1
> 
>         for k in xrange(0, n):
>             A[k + 1, k] = floor(2 * pi * weights[k] * 2^m)
>         B = A.LLL(delta=delta)
> 
>         R = RealField(250)
>         for k in xrange(0, n + 1):
>             t = R(abs(B[n,k])/2^r)
>             v1 = euler_product1(t)
>             v2 = euler_product2(t)
>             possible_t.append( (abs(v2), abs(v1), t, floor(abs(t)) - 20) )
> 
>         possible_t.sort()
>         possible_t = possible_t[-10:]
>         #print "On try number", l, " best candidates so far are"
>         #for _ in possible_t[-10:]:
>         #    print _
>         print "current memory usage:", get_memory_usage()
>         sys.stdout.flush()
> 
>     return possible_t
> 


-- 
To post to this group, send an email to [email protected]
To unsubscribe from this group, send an email to 
[email protected]
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to