MatMult_Scatter woes
Matthew Knepley
knepley at gmail.com
Mon Mar 30 18:04:40 CDT 2009
On Mon, Mar 30, 2009 at 5:52 AM, Jed Brown <jed at 59a2.org> wrote:
> The current implementation of MatMult_Scatter and
> MatMultTranspose_Scatter do not actually have matrix semantics unless
> the index sets are permutations. For example, it's generally desirable
> that
>
> MatMult(A,x,y);
>
> agrees with
>
> VecZeroEntries(y);
> MatMultAdd(A,x,y,y);
>
> Similarly for MatMultTranspose. In addition, MatMultTranspose should
> actually be the transpose of MatMult. Consider the scatter defined by
>
> scatter : x -> y
> isx = [0 0]
> isy = [0 1]
>
> where x has length 1 and y has length 2. This forward scatter is
> equivalent to a 2x1 matrix A = [1;1]
>
> Indeed A*[1] = [1;1]
>
> but A'*[1;1] = [2]
>
> where as MatMultTranspose_Scatter(A,y=[1;1],x) gives x=[1].
>
> This can be corrected by changing the body of MatMultTranspose_Scatter
> from
>
> ierr =
> VecScatterBegin(scatter->scatter,x,y,INSERT_VALUES,SCATTER_REVERSE);CHKERRQ(ierr);
> ierr =
> VecScatterEnd(scatter->scatter,x,y,INSERT_VALUES,SCATTER_REVERSE);CHKERRQ(ierr);
>
> to
>
> ierr = VecZeroEntries(y);CHKERRQ(ierr);
> ierr =
> VecScatterBegin(scatter->scatter,x,y,ADD_VALUES,SCATTER_REVERSE);CHKERRQ(ierr);
> ierr =
> VecScatterEnd(scatter->scatter,x,y,ADD_VALUES,SCATTER_REVERSE);CHKERRQ(ierr);
>
> and similarly for MatMult_Scatter.
>
> Unfortunately, these modifications roughly double the cost of typical
> sequential scatters and could be much worse (scattering from a small
> vector to a very large one). I think that correctness is more important
> here and users would typically not use MatScatter when this would have
> significant impact or when INSERT_VALUES semantics are desired. Of
> course some performance can be recovered by having MatScatter use
> INSERT_VALUES when the destination index set is a permutation.
I would vote for checking for a square matrix, and otherwise use the
expensive form.
>
> Also, what is the ssh url for the repo? I've tried some variations on
> ssh://petsc@petsc.cs.iit.edu/petsc/petsc-dev without success.
It is ssh://petsc@petsc.cs.iit.edu//hg/petsc/petsc-dev
Matt
>
> Jed
>
--
What most experimenters take for granted before they begin their experiments
is infinitely more interesting than any results to which their experiments
lead.
-- Norbert Wiener
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20090330/0a8fcfa6/attachment.html>
More information about the petsc-dev
mailing list