[petsc-dev] Merging VecScatter objects

Barry Smith bsmith at mcs.anl.gov
Tue Mar 30 15:01:33 CDT 2010

On Mar 30, 2010, at 2:55 PM, Dmitry Karpeev wrote:

> I think I need to merge several VecScatters S1, ..., Sn into a single
> VecScatter S,
> hoping that applying S will reduce the latency compared to applying S1
> through Sn in sequence.
> The assumptions here are that all the Si operate between the same  
> Vecs,
> that the target index ranges are disjoint and that at least one of the
> Vecs is an MPI Vec.
> Here are my questions:
> 1. Does anybody have any experience with something like this?
> 2. Is it even worth it trying to merge the scatters (the assumption is
> that the resulting S will be used many times)?
> 3. Is there an easy or existing way to do it?
> 4. If I have to do it, does anybody object to my introducing  
> something like
> VecScatterMergeScatters(PetscInt nScatters, VecScatter scatters[],
> VecScatter *mergedScatter)?
> Thanks.
> Dmitry.

    I would much prefer to see the merge done at the time of the ISs  
(that is before the sub scatters are created). Merging IS's is easy  
and won't inflate the size of the VecScatter interface. Even if you  
need separately both the separate vecscatters and the big vecscatter  
can't you just create them all directly? I guess the one case where  
this is painful is if you already have code that creates the  
individual scatters and you don't want to muck inside it to extract  
the ISs.

    As you will see, I try very hard to keep the PETSc API from  
growing whenever possible.


More information about the petsc-dev mailing list