You are using lots of threads but the sparse matrix structure is not thread
safe.  Setting a value in the SparseMatrix causes mutation to internal data
structures.

If you can have each thread do all the updates for a single thread, that
would be much better.  Another option is to synchronize on the matrix where
you call set.  Another option is synchronize on the row somehow.
 Synchronizing on row might give you the highest performance, but would be
slightly trickier to arrange and it would still include lots of uncontended
lock overhead.

Is multi-threading really what you want?  Why?  Does each value take a long
time to compute?

Can you use a lockless container to collect all of the values to insert and
insert them using a single thread?  This last is probably the fastest of
all of the options.

On Sun, Sep 9, 2012 at 11:29 AM, PEDRO MANUEL JIMENEZ RODRIGUEZ <
pmjimenez1...@hotmail.com> wrote:

>
> Hi all,
>
> I'm trying to set all values of a SparseMatrix structure using multiple
> threads but I'm getting an error of "ArrayIndexOutBoundsException" even
> when access indexes are correct. In fact, when I subtitude SparseMatrix
> structure for a double array I didn't get any error.
>
> Does any one have any idea what could be the problem?
>
> Error:
>      matrixK.set(
>                         index,
>                         j,
>                         Math.exp((-1 * (matrixD.get(index, j) *
> matrixD.get(
>                                 index, j))) / epsilon));
>
>
> No error:
>         matrixK[index][j] = Math.exp((-1 * (matrixD.get(index, j) *
> matrixD.get(
>                         index, j))) / epsilon);
>
> Thanks a lot.
>
> Pedro.
>

Reply via email to