Hi Luc,

Thanks for the feedback. I did not realize that the check for the
ClassCastException was performance related. Let me know your thoughts
once you get a chance to look at the patch, and I can put this back in
and resubmit, ie if it is a RealMatrixImpl, then do what the methods
with RealMatrixImpl did, else use the getEntry() calls.

Also, I think the JVM can detect that the incoming arg is a
RealMatrixImpl and go to the correct method without the code having to
catch a ClassCastException. I have used this pattern in some other code
I've written, where there are multiple overloaded methods, each taking a
particular impl.

-sujit

On Mon, 2008-12-01 at 23:52 +0100, Luc Maisonobe wrote:
> Sujit Pal a écrit :
> > Hello,
> > 
> > I am a new, but fairly happy user of commons-math 1.2 and I have begun
> > to use it in my code. I needed a sparse matrix implementation for some
> > data analysis work I was doing, and unfortunately the code with
> > RealMatrixImpl was coming back with an OOME. So I built a
> > SparseRealMatrixImpl as a subclass of RealMatrixImpl, which uses a
> > Map<Point,Double> as its backing store, storing only the non-zero
> > entries. I would like to contribute this implementation back to the
> > commons-math project.
> > 
> > I have opened a JIRA enhancement request MATH-230 with a patch against
> > the 2.0 branch. Patch and detailed description of the changes are
> > available here.
> > http://issues.apache.org/jira/browse/MATH-230
> > 
> > I have also had to make some changes to RealMatrixImpl and
> > LUDecompositionImpl, mainly replacing the data[][] references with
> > RealMatrix.getEntry(i,j) calls to insulate the backing store from being
> > accessed directly by calling code, and thus making it possible for
> > subclasses to provide their own internal backing stores.
> > 
> > Would appreciate if you folks can take a look and let me know if it is
> > feasible to add this into the 2.0 release. That way I can continue using
> > commons-math future versions without having to patch it after every
> > upgrade.
> 
> I'll have a look at it tomorrow evening.
> For now, one thing  that bother me is the removal of the dedicated code
> that explicitely avoided getEntry(). This was added a few months ago for
> performance reason, since the previous generic code was painfully slow.
> The trick with the ClassCastException allows really fast check since the
> virtual machine can completely optimize it out in some cases, it is an
> enhancement of what was discussed here:
> http://markmail.org/message/36fgg7vx6gzd3ziu. Our discussion at that
> time was that the more common case (RealMatrixImpl) should be as
> efficient as possible (and Ted wants now it to be even faster by
> changing the underlying storage which is a good thing). This trick is
> not beautiful perfectly generic code, it is a pragmatic way to be fast
> in a common case and removing it will most probably induce poorer
> performances.
> 
> Luc
> 
> > 
> > I noticed that there has been some previous discussion about sparse
> > matrix support here:
> > http://markmail.org/message/2k5dk4fbewdtn5rz
> > so I sent a personal email to John Iacona asking him about about the
> > code he speaks of here. But he is working on other things, and doesn't
> > know when he will be able to check in his sparse matrix support changes.
> > His approach is a little  different from mine (he has a SparseMatrix
> > interface, which is implemented by a SparseMatrixImpl). I considered
> > that approach initially, but came to the conclusion that it would mean
> > quite a bit of code duplication, which I wanted to avoid as far as
> > possible.
> > 
> > Thanks
> > -sujit
> > 
> > 
> > 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
> > 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to