Well, I'll reply to myself on this.  I made a ticket and attached a patch (to 
the ticket).  I do want some other people looking at it to see if there are 
more elegant fixes.  It does make a quite noticable runtime difference on 7x7 
matrices (I was rather amazed how much the difference was actually).

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

--
Joel

On Wednesday 03 October 2007 21:52, Joel B. Mohler wrote:
> Hi,
>
> It would have been nice to sit down in person with Robert and/or William
> about this at Clay, but I only fully realized the extent of my questions
> about 1.5 hours before I wanted to leave :).  Anyhow, the matrix
> multiplication process is looking a bit inefficient to me.
>
> Here's the situation:
> sage: M=MatrixSpace(ZZ,3,3)
> sage: m=M([range(9)])
> sage: n=M([range(1,10)])
> sage: prun m*n
>          20 function calls in 0.000 CPU seconds
>    Ordered by: internal time
>    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
>         1    0.000    0.000    0.000    0.000 <string>:1(<module>)
>         2    0.000    0.000    0.000    0.000
> matrix_space.py:105(MatrixSpace) 1    0.000    0.000    0.000    0.000
> matrix_space.py:282(change_ring) 1    0.000    0.000    0.000    0.000
> matrix_space.py:306(base_extend) 1    0.000    0.000    0.000    0.000
> matrix_space.py:648
> (matrix_space)
>         3    0.000    0.000    0.000    0.000 matrix_space.py:670(ncols)
>         3    0.000    0.000    0.000    0.000 matrix_space.py:681(nrows)
> ...
>
> The most alarming thing in that is the "base_extend" call.  Both have a
> base of ZZ (It also happens if both matrices are in MatrixSpace(QQ)).  
> This occurs because of a call to base_base_extend_canonical_sym_c around
> line 2075 in element.pyx.  The other thing that alarms me is the calls
> to "matrix_space" and "MatrixSpace" to construct a new parent space.  These
> are square matrices so we should not have to call out to the (python)
> parent ring to make a new parent ring.
>
> Now, both of these are easily enough fixed by an appropriate if statement
> above the offending lines of code.  However, it seems that this could all
> be fit into the coercion model a little more seamlessly.  It seems that the
> Matrix.__mul__ method pretty much takes over and does it's own thing.
>
> Any thoughts (especially from the coercion guru)?  Craig suggested that
> matrix multiplication could be viewed as an action in the coercion model,
> but I'm not sure I agree.  Mathematically, if element 'a' acts on element
> 'b', I expect the result to have the same parent as 'b', but that isn't the
> case with non-square matrices in general.  I don't know if that definition
> of 'action' is the same as the coercion model's.
>
> --
> Joel
>
> 

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://sage.scipy.org/sage/ and http://modular.math.washington.edu/sage/
-~----------~----~----~----~------~----~------~--~---

Reply via email to