Scattering context options

Barry Smith bsmith at mcs.anl.gov
Fri Jul 27 12:17:34 CDT 2007


   Graham,

   It seems unlike the matrix was preallocated; this will
definitely slow things down a great deal. Pluse you have a
scatter for each row, this is fundamentally not scalable.

  Barry


On Fri, 27 Jul 2007, Graham Kells wrote:

> Hi ,
> 
> I'm scattering from a global vector (used as a kind of  look up table) to a
> bunch of local vectors and then using the values in the local vectors as
> indices to populate a global matrix. 
> The basic population routine goes something like this
> 
>  do myrow=Istart,Iend-1
> 
>      ! Returns column indices of full matrix for rowindex list(myrow+1)
>    call getrow(list(myrow+1),rowCOO,colCOO,valCOO)
>        call ISCreateGeneral(PETSC_COMM_WORLD,n,(colCOO-1),from,ierr)
>    call ISCreateGeneral(PETSC_COMM_SELF,n,idx_to-1,to,ierr)    call
> VecScatterCreate(vlist,from,outvec,to,scatter,ierr)
>    call
> VecScatterBegin(scatter,vlist,outvec,INSERT_VALUES,SCATTER_FORWARD,ierr)
>    call VecScatterEnd(scatter,vlist,outvec,INSERT_VALUES,SCATTER_FORWARD,ierr)
>    call VecScatterDestroy(scatter,ierr)
>    call ISDestroy(from,ierr)
>    call ISDestroy(to,ierr)
> 
>    call VecGetValues(outvec,n,idx_to-1,idx_real,ierr)
>    idx_from=int(idx_real)
> 
> 
>    call MatSetValues(A,1,myrow,n,idx_from-1,valCOO,INSERT_VALUES,ierr)
> 
> end do
> 
> While this works, it is prohibitively slow. Any ideas on why this is?  Of
> course if you can suggest a better way of doing this that would be great.
> 
> Supposing you can't and I want to experiment with different MPI communication
> modes within the scatter context. How do specify the  MPI_Ssend option, for
> example?
> 
> Thanks in advance,
> 
> Graham
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 




More information about the petsc-users mailing list