#13925: Tune rational echelon form code
------------------------------+---------------------------------------------
   Reporter:  nbruin          |             Owner:  jason, was
       Type:  defect          |            Status:  new       
   Priority:  major           |         Milestone:  sage-5.6  
  Component:  linear algebra  |          Keywords:            
Work issues:                  |   Report Upstream:  N/A       
  Reviewers:                  |           Authors:            
  Merged in:                  |      Dependencies:            
   Stopgaps:                  |  
------------------------------+---------------------------------------------
 Presently, there are whole ranges of matrix sizes and ranks where the
 default heuristic for choosing an `echelon_form` algorithm for matrices
 over `QQ` chooses the slowest choice possible:
 {{{
 from sage.misc.sage_timeit import sage_timeit
 def timemat(n,m,r,B):
     """
     does some matrix timings on a single random matrix described by the
     parameters given:
       n : Number of distinct rows
       m : Number of colums
       r : Number of times the rows should be repeated
       B : Height bound on rational numbers put in the matrix

     The matrix is essentially generated by constructing an n x m matrix
     with random entries and then stacking r copies. This is meant as a
 cheap
     way of making non-maximal rank matrices.
     """
     M = MatrixSpace(QQ,n*r,m)
     L = r*list(randint(-B,B)/randint(1,B) for j in range(n*m))
     D = globals().copy()
     D['M'] = M
     D['L'] = L
     t1=min(sage_timeit('M(L).echelon_form("classical")',D).series)
     t2=min(sage_timeit('M(L).echelon_form("multimodular")',D).series)/t1
     t3=min(sage_timeit('M(L).echelon_form("padic")',D).series)/t1
     return (1,t2,t3)
 }}}
 Timings are reported as `(classical,multimodular,padic)` with `classical`
 scaled to 1. These tests are all in the range where currently `padic` is
 chosen as a default. These timings are all done on 5.3b2 + #12313 + fix of
 Thierry's code + un-randomization of prime choice in `padic`. Without
 #12313 one would run out of memory on `padic` and without the other ones,
 the timings of padic would be much worse:
 {{{
 sage: timemat(10,10,1,10^3)
 (1, 1.4593604789072667, 2.25968735560318)
 sage: timemat(10,10,1,10^800)
 (1, 1.4550198262904093, 2.2320730206016584)
 sage: timemat(20,20,1,10^800)
 (1, 0.26421709436394647, 0.39672901423049933)
 sage: timemat(50,50,1,10^20)
 (1, 0.028462514595311343, 0.04085242952549667)
 sage: timemat(20,30,2,10^20)
 (1, 1.311503148833886, 1.0495737479473444)
 sage: timemat(20,30,1,10^20)
 (1, 1.1408739793541882, 0.8243377328388548)
 sage: timemat(20,30,2,10^800)
 (1, 1.0566089264644132, 1.2234341427870548)
 sage: timemat(50,60,2,10^800)
 (1, 0.5444370157383747, 0.18547612309046932)
 }}}
 so it seems that the cross-overs could use some tuning. In particular, for
 non-maximal rank matrices it seems to take a while longer to overtake
 classical. It would be great if someone would be able to tune this code
 properly. It is very useful if sage would echelonize small matrices
 quickly over arbitrary base fields quickly in most most cases (and not
 make silly choices), because it allows linear algebra intensive algorithms
 in a base-field agnostic way.

 See [http://trac.sagemath.org/sage_trac/ticket/13400#comment:29 #13400,
 comment 29] for the context of some of the remarks about the conditions
 under which these timings were made. The essential problem reported in
 this ticket is quite independent of memory issues, though!

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/13925>
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