#715: Parents probably not reclaimed due to too much caching
--------------------------------------------------+-------------------------
       Reporter:  robertwb                        |         Owner:  somebody    
     
           Type:  defect                          |        Status:  
needs_review     
       Priority:  major                           |     Milestone:  sage-5.0    
     
      Component:  coercion                        |    Resolution:              
     
       Keywords:  weak cache coercion Cernay2012  |   Work issues:              
     
Report Upstream:  N/A                             |     Reviewers:  Jean-Pierre 
Flori
        Authors:  Simon King                      |     Merged in:              
     
   Dependencies:  #9138, #11900, #11599, #11521   |      Stopgaps:              
     
--------------------------------------------------+-------------------------
Changes (by jpflori):

  * status:  needs_work => needs_review


Old description:

> Here is a small example illustrating the issue.
>
> The memory footprint of the following piece of code grows indefinitely.
>
> {{{
> sage: K = GF(1<<55,'t')
> sage: a = K.random_element()
> sage: while 1:
> ....:     E = EllipticCurve(j=a); P = E.random_point(); 2*P; del E, P;
>
> }}}
> E and P get deleted, but when 2*P is computed, the action of integers on
> A, the abelian group of rational points of the ellitpic curve, gets
> cached in the corecion model.
>
> A key-value pair is left in coercion_model._action_maps dict:
>
> (ZZ,A,*) : IntegerMulAction
>
> Moreover there is at least also references to A in the IntegerMulAction
> and one in ZZ._action_hash.
>
> So weak refs should be used in all these places if it does not slow
> things too much.
>
> '''To be merged with #11521'''. Apply:
>
>  * [attachment:trac715_one_triple_dict.patch]
>  * [attachment:trac_715-reviewer.patch]
>  * [attachment:trac_715-rebase_11599.patch]
>  * [attachment:trac_715-modulo.patch]
>
> and '''then''' the tickets from #11521.

New description:

 Here is a small example illustrating the issue.

 The memory footprint of the following piece of code grows indefinitely.

 {{{
 sage: K = GF(1<<55,'t')
 sage: a = K.random_element()
 sage: while 1:
 ....:     E = EllipticCurve(j=a); P = E.random_point(); 2*P; del E, P;

 }}}
 E and P get deleted, but when 2*P is computed, the action of integers on
 A, the abelian group of rational points of the ellitpic curve, gets cached
 in the corecion model.

 A key-value pair is left in coercion_model._action_maps dict:

 (ZZ,A,*) : IntegerMulAction

 Moreover there is at least also references to A in the IntegerMulAction
 and one in ZZ._action_hash.

 So weak refs should be used in all these places if it does not slow things
 too much.

 '''To be merged with #11521'''. Apply:

  * [attachment:trac_715-one_triple_dict-take2.patch]
  * [attachment:trac_715-reviewer-take2.patch]
  * [attachment:trac_715-rebase_11599-take2.patch]
  * [attachment:trac_715-size_t-take2.patch]

 and '''then''' the tickets from #11521.

--

Comment:

 The current patches seem ok both on my 64 bits system and on the virtual
 32 bits system running within it.
 At least Sage does start and computes correctly 1+1.
 I'm currently running "make ptest" on both system.
 On the latter, this will take an awfully long time.

 I've also taken the liberty to modify the "reviewer" patch to fix
 formatting issues (and rebase patches of #12313 on top of that).

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/715#comment:180>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sage-trac?hl=en.

Reply via email to