commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From simon <>
Subject Re: [math] speeding up RealMatrix.getEntry
Date Sun, 25 May 2008 21:30:11 GMT

On Sun, 2008-05-25 at 17:27 +0200, Luc Maisonobe wrote:
> Hello,
> Someone complained recently to me about poor performances of
> RealMatrix.multiply(). A quick check showed me that changing the indices
> checks in RealMatrix.getEntry() tremendously improved the performances
> (about a 3 to 1 ratio in a simple case).
> The current implementation explicitely calls the isValidCoordinate prior
> to getting the element from the underlying array. This method calls
> getRowDimension and getColumnDimension and do the intervals checks. I
> think this is unnecessary and duplicates the checks that are already
> done by the JVM. I would like to replace this by an a posteriori check
> when the JVM triggers an ArrayIndexOutOfBoundException. Basically, this
> means replacing:
>   if (!isValidCoordinate(row,column)) {
>     throw new MatrixIndexException(...);
>   }
>   return data[row][column];
> by:
>   try {
>       return data[row][column];
>   } catch (ArrayIndexOutOfBoundsException e) {
>     throw new MatrixIndexException(...);
>   }
> I have read somewhere that array index checking is now highly optimized
> by JVM and can even be automatically removed in some cases. Do you think
> moving to such a way to handle index errors is sensible ? There are
> several other places where this could be done, so I would like to have
> your comments before doing the changes.

Sounds good to me. I cannot think of any problems that might cause, it
does seem likely to result in a performance improvement, and it looks


To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message