#8096: Speed up parent creation for multiplication of square matrices
------------------------------+---------------------------------------------
   Reporter:  boothby         |          Owner:  boothby          
       Type:  enhancement     |         Status:  needs_review     
   Priority:  minor           |      Milestone:  sage-5.0         
  Component:  linear algebra  |       Keywords:                   
Work_issues:  rebase          |       Upstream:  N/A              
   Reviewer:                  |         Author:  boothby, robertwb
     Merged:                  |   Dependencies:                   
------------------------------+---------------------------------------------

Comment(by SimonKing):

 Here is the example from the ticket description.

 Without the patch:
 {{{
 sage: for d in range(1, 70):
 ....:     print d,
 ....:     A = random_matrix(GF(3), d)
 ....:     B = random_matrix(GF(3), d)
 ....:     timeit("C = A*B")
 ....:
 1 625 loops, best of 3: 41 µs per loop
 2 625 loops, best of 3: 41.1 µs per loop
 3 625 loops, best of 3: 41 µs per loop
 4 625 loops, best of 3: 41.4 µs per loop
 5 625 loops, best of 3: 41.6 µs per loop
 6 625 loops, best of 3: 42.4 µs per loop
 7 625 loops, best of 3: 42.9 µs per loop
 8 625 loops, best of 3: 43.3 µs per loop
 9 625 loops, best of 3: 43.5 µs per loop
 10 625 loops, best of 3: 44.1 µs per loop
 11 625 loops, best of 3: 44.8 µs per loop
 12 625 loops, best of 3: 45.5 µs per loop
 13 625 loops, best of 3: 46.3 µs per loop
 14 625 loops, best of 3: 47.6 µs per loop
 15 625 loops, best of 3: 48.8 µs per loop
 16 625 loops, best of 3: 50.4 µs per loop
 17 625 loops, best of 3: 51.8 µs per loop
 18 625 loops, best of 3: 53.4 µs per loop
 19 625 loops, best of 3: 54.7 µs per loop
 20 625 loops, best of 3: 56.5 µs per loop
 21 625 loops, best of 3: 58.4 µs per loop
 22 625 loops, best of 3: 60.8 µs per loop
 23 625 loops, best of 3: 63.3 µs per loop
 24 625 loops, best of 3: 61.7 µs per loop
 25 625 loops, best of 3: 64.1 µs per loop
 26 625 loops, best of 3: 66.3 µs per loop
 27 625 loops, best of 3: 70.3 µs per loop
 28 625 loops, best of 3: 72.7 µs per loop
 29 625 loops, best of 3: 75.2 µs per loop
 30 625 loops, best of 3: 79.4 µs per loop
 31 625 loops, best of 3: 82 µs per loop
 32 625 loops, best of 3: 86.5 µs per loop
 33 625 loops, best of 3: 89.8 µs per loop
 34 625 loops, best of 3: 94.3 µs per loop
 35 625 loops, best of 3: 98.1 µs per loop
 36 625 loops, best of 3: 92.1 µs per loop
 37 625 loops, best of 3: 95.9 µs per loop
 38 625 loops, best of 3: 100 µs per loop
 39 625 loops, best of 3: 105 µs per loop
 40 625 loops, best of 3: 109 µs per loop
 41 625 loops, best of 3: 117 µs per loop
 42 625 loops, best of 3: 123 µs per loop
 43 625 loops, best of 3: 129 µs per loop
 44 625 loops, best of 3: 136 µs per loop
 45 625 loops, best of 3: 142 µs per loop
 46 625 loops, best of 3: 149 µs per loop
 47 625 loops, best of 3: 156 µs per loop
 48 625 loops, best of 3: 146 µs per loop
 49 625 loops, best of 3: 154 µs per loop
 50 625 loops, best of 3: 161 µs per loop
 51 625 loops, best of 3: 168 µs per loop
 52 625 loops, best of 3: 177 µs per loop
 53 625 loops, best of 3: 185 µs per loop
 54 625 loops, best of 3: 194 µs per loop
 55 625 loops, best of 3: 202 µs per loop
 56 625 loops, best of 3: 213 µs per loop
 57 625 loops, best of 3: 222 µs per loop
 58 625 loops, best of 3: 234 µs per loop
 59 625 loops, best of 3: 244 µs per loop
 60 625 loops, best of 3: 225 µs per loop
 61 625 loops, best of 3: 235 µs per loop
 62 625 loops, best of 3: 248 µs per loop
 63 625 loops, best of 3: 260 µs per loop
 64 625 loops, best of 3: 271 µs per loop
 65 625 loops, best of 3: 287 µs per loop
 66 625 loops, best of 3: 297 µs per loop
 67 625 loops, best of 3: 311 µs per loop
 68 625 loops, best of 3: 324 µs per loop
 69 625 loops, best of 3: 340 µs per loop
 }}}

 With the patch:
 {{{
 sage: for d in range(1, 70):
 ....:     print d,
 ....:     A = random_matrix(GF(3), d)
 ....:     B = random_matrix(GF(3), d)
 ....:     timeit("C = A*B")
 ....:
 1 625 loops, best of 3: 18.3 µs per loop
 2 625 loops, best of 3: 18.4 µs per loop
 3 625 loops, best of 3: 18.5 µs per loop
 4 625 loops, best of 3: 18.8 µs per loop
 5 625 loops, best of 3: 18.9 µs per loop
 6 625 loops, best of 3: 19.5 µs per loop
 7 625 loops, best of 3: 19.9 µs per loop
 8 625 loops, best of 3: 20.3 µs per loop
 9 625 loops, best of 3: 21 µs per loop
 10 625 loops, best of 3: 21.4 µs per loop
 11 625 loops, best of 3: 22 µs per loop
 12 625 loops, best of 3: 22.4 µs per loop
 13 625 loops, best of 3: 23.9 µs per loop
 14 625 loops, best of 3: 24.9 µs per loop
 15 625 loops, best of 3: 25.6 µs per loop
 16 625 loops, best of 3: 27.2 µs per loop
 17 625 loops, best of 3: 28.2 µs per loop
 18 625 loops, best of 3: 29.8 µs per loop
 19 625 loops, best of 3: 31.4 µs per loop
 20 625 loops, best of 3: 33.1 µs per loop
 21 625 loops, best of 3: 35 µs per loop
 22 625 loops, best of 3: 37.2 µs per loop
 23 625 loops, best of 3: 39.4 µs per loop
 24 625 loops, best of 3: 38.3 µs per loop
 25 625 loops, best of 3: 40.9 µs per loop
 26 625 loops, best of 3: 43.2 µs per loop
 27 625 loops, best of 3: 46 µs per loop
 28 625 loops, best of 3: 49 µs per loop
 29 625 loops, best of 3: 51.9 µs per loop
 30 625 loops, best of 3: 55.2 µs per loop
 31 625 loops, best of 3: 58.3 µs per loop
 32 625 loops, best of 3: 62.8 µs per loop
 33 625 loops, best of 3: 66.9 µs per loop
 34 625 loops, best of 3: 71.1 µs per loop
 35 625 loops, best of 3: 75.1 µs per loop
 36 625 loops, best of 3: 68.1 µs per loop
 37 625 loops, best of 3: 72.3 µs per loop
 38 625 loops, best of 3: 76.9 µs per loop
 39 625 loops, best of 3: 81.7 µs per loop
 40 625 loops, best of 3: 85.8 µs per loop
 41 625 loops, best of 3: 94.2 µs per loop
 42 625 loops, best of 3: 99.8 µs per loop
 43 625 loops, best of 3: 106 µs per loop
 44 625 loops, best of 3: 112 µs per loop
 45 625 loops, best of 3: 119 µs per loop
 46 625 loops, best of 3: 126 µs per loop
 47 625 loops, best of 3: 132 µs per loop
 48 625 loops, best of 3: 123 µs per loop
 49 625 loops, best of 3: 130 µs per loop
 50 625 loops, best of 3: 137 µs per loop
 51 625 loops, best of 3: 145 µs per loop
 52 625 loops, best of 3: 153 µs per loop
 53 625 loops, best of 3: 162 µs per loop
 54 625 loops, best of 3: 170 µs per loop
 55 625 loops, best of 3: 180 µs per loop
 56 625 loops, best of 3: 190 µs per loop
 57 625 loops, best of 3: 200 µs per loop
 58 625 loops, best of 3: 210 µs per loop
 59 625 loops, best of 3: 221 µs per loop
 60 625 loops, best of 3: 202 µs per loop
 61 625 loops, best of 3: 212 µs per loop
 62 625 loops, best of 3: 224 µs per loop
 63 625 loops, best of 3: 237 µs per loop
 64 625 loops, best of 3: 248 µs per loop
 65 625 loops, best of 3: 263 µs per loop
 66 625 loops, best of 3: 276 µs per loop
 67 625 loops, best of 3: 288 µs per loop
 68 625 loops, best of 3: 305 µs per loop
 69 625 loops, best of 3: 318 µs per loop
 }}}

 So, there is an improvement for bigger matrices as well.

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