mahout-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From PEDRO MANUEL JIMENEZ RODRIGUEZ <pmjimenez1...@hotmail.com>
Subject RE: ArrayIndexOutOfBoundsException SparseMatrix
Date Mon, 10 Sep 2012 07:40:53 GMT

Hi Ted,
I just playing around with the code trying to obtain a better performance. Calculate each
value doesn't take so long but I'm trying to obtain a better performance filling the matrix.
Do you think that use multithreading is not going to improve it?
Thanks for your reply.
Pedro.

> From: ted.dunning@gmail.com
> Date: Sun, 9 Sep 2012 12:07:49 -0700
> Subject: Re: ArrayIndexOutOfBoundsException SparseMatrix
> To: user@mahout.apache.org
> 
> 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 <
> pmjimenez1983@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.
> >
 		 	   		  
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message