MatMult_Scatter woes

Jed Brown jed at 59A2.org
Mon Mar 30 05:52:21 CDT 2009


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.


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.

Jed
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20090330/e5fffb2a/attachment.sig>


More information about the petsc-dev mailing list