#11521: Use weak references to cache homsets
--------------------------------------------------+-------------------------
       Reporter:  jpflori                         |         Owner:  robertwb    
                 
           Type:  defect                          |        Status:  
positive_review              
       Priority:  major                           |     Milestone:  sage-5.5    
                 
      Component:  coercion                        |    Resolution:              
                 
       Keywords:  sd35                            |   Work issues:              
                 
Report Upstream:  N/A                             |     Reviewers:  Jean-Pierre 
Flori, Nils Bruin
        Authors:  Simon King                      |     Merged in:              
                 
   Dependencies:  #12969; to be merged with #715  |      Stopgaps:              
                 
--------------------------------------------------+-------------------------

Old description:

> Originally, this ticket was about the following memory leak when
> computing with elliptic curves:
>
> {{{
> sage: K = GF(1<<55,'t')
> sage: a = K.random_element()
> sage: while 1:
> ....:     E = EllipticCurve(j=a); P = E.random_point(); 2*P;
> }}}
> This example is in fact solved by #715. However, while working on that
> ticket, another leak has been found, namely
>
> {{{
> sage: for p in prime_range(10^5):
> ....:     K = GF(p)
> ....:     a = K(0)
> ....:
> sage: import gc
> sage: gc.collect()
> 0
> }}}
> So, I suggest to start with #715 and solve the second memory leak on top
> of it. It seems that a strong cache for homsets is to blame. I suggest to
> use the weak `TripleDict` instead, which were introduced in #715.
>
> '''To be merged with #715 and #13447'''. Apply
>
> * the patches from #715
> * [attachment:trac_11521_homset_weakcache_combined.patch]
> * [attachment:trac_11521_callback.patch]
> * the patches from #13447

New description:

 Originally, this ticket was about the following memory leak when computing
 with elliptic curves:

 {{{
 sage: K = GF(1<<55,'t')
 sage: a = K.random_element()
 sage: while 1:
 ....:     E = EllipticCurve(j=a); P = E.random_point(); 2*P;
 }}}
 This example is in fact solved by #715. However, while working on that
 ticket, another leak has been found, namely

 {{{
 sage: for p in prime_range(10^5):
 ....:     K = GF(p)
 ....:     a = K(0)
 ....:
 sage: import gc
 sage: gc.collect()
 0
 }}}
 So, I suggest to start with #715 and solve the second memory leak on top
 of it. It seems that a strong cache for homsets is to blame. I suggest to
 use the weak `TripleDict` instead, which were introduced in #715.

 '''To be merged with #715 and #13447'''. Apply

 * the patches from #715
 * [attachment:trac_11521_homset_weakcache_combined.patch]
 * [attachment:trac_11521_callback.patch]

--

Comment (by nbruin):

 No, we do not need that merge. We should absolutely not add any more
 dependencies to these tickets. They are good to go as is (modulo nasty
 surprises). We can improve things afterwards. The bump to 5.5 is already
 unfortunate, because that means we've already unnecessarily missed one
 sailing.

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/11521#comment:168>
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