[petsc-users] Unequal sparse matrix row distribution for MPI MatMult
Barry Smith
bsmith at mcs.anl.gov
Sun Mar 29 23:26:57 CDT 2015
> On Mar 29, 2015, at 11:05 PM, Steena M <stm8086 at yahoo.com> wrote:
>
> Thanks Matt. I used PETSC_DETERMINE but I'm now getting an allocation-based error:
>
> [0]PETSC ERROR: --------------------- Error Message ------------------------------------
> [0]PETSC ERROR: Argument out of range!
> [0]PETSC ERROR: New nonzero at (2,18) caused a malloc!
> [0]PETSC ERROR: ------------------------------------------------------------------------
>
> I tried preallocating on each rank for the diagonal and off diagonal section of the matrix as the next step My current approximations for preallocation
>
> CHKERRQ( MatMPIBAIJSetPreallocation(A,1,5,PETSC_DEFAULT,5,PETSC_DEFAULT));
These arguments where you pass PETSC_DEFAULT are expecting a pointer not an integer. You can pass NULL in those locations. Though it is better to provide the correct preallocation rather than some defaults.
Barry
>
> are throwing segmentation errors.
>
> [0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, probably memory access out of range
>
> Any insights into what I'm doing wrong?
>
> Thanks,
> Steena
>
>
>
> On Sun, 3/29/15, Matthew Knepley <knepley at gmail.com> wrote:
>
> Subject: Re: [petsc-users] Unequal sparse matrix row distribution for MPI MatMult
> To: "Steena M" <stm8086 at yahoo.com>
> Cc: "Barry Smith" <bsmith at mcs.anl.gov>, petsc-users at mcs.anl.gov
> Date: Sunday, March 29, 2015, 10:02 PM
>
> On Sun, Mar 29, 2015 at
> 9:56 PM, Steena M <stm8086 at yahoo.com>
> wrote:
> Hi
> Barry,
>
>
>
> I am trying to partition a 20 row and 20 col sparse matrix
> between two procs such that proc 0 has 15 rows and 20 cols
> and proc 1 has 5 rows and 20 cols. The code snippet:
>
>
>
>
>
>
>
> CHKERRQ(MatCreate(PETSC_COMM_WORLD,&A)); //
> at runtime: -matload_block_size 1
>
>
>
>
>
> if (rank ==0)
>
> {
>
> CHKERRQ( MatSetSizes(A, 15, 20, 20,
> 20) ); //rank 0 gets 75% of the rows
>
> CHKERRQ( MatSetType(A, MATMPIBAIJ)
> );
>
> CHKERRQ( MatLoad(A,fd) );
>
> }
>
>
>
> else
>
> {
>
> CHKERRQ( MatSetSizes(A, 5, 20, 20,
> 20) ); //rank 1 gets 25% of the rows
>
> CHKERRQ( MatSetType(A, MATMPIBAIJ)
> );
>
> CHKERRQ( MatLoad(A,fd) );
>
> }
>
>
>
> This throws the following error (probably from psplit.c):
>
> [1]PETSC ERROR: --------------------- Error Message
> ------------------------------------
>
> [1]PETSC ERROR: Nonconforming object sizes!
>
> [1]PETSC ERROR: Sum of local lengths 40 does not equal
> global length 20, my local length 20
>
> likely a call to VecSetSizes() or MatSetSizes() is
> wrong.
>
> See http://www.mcs.anl.gov/petsc/documentation/faq.html#split!
>
>
>
> This error printout doesn't quite make sense to me.
> I'm trying to specify a total matrix size of 20x20... I
> haven't yet figured out where the '40' comes
> from in the error message.
>
>
>
> Any thoughts on what might be going wrong?
>
> Its the column specification. Just
> use PETSC_DETERMINE for the local columns since all our
> sparse matrixformats are row divisions
> anyway.
>
> Thanks,
>
> Matt
> Thanks in advance,
>
> Steena
>
>
>
>
>
>
>
> --------------------------------------------
>
> On Sun, 3/22/15, Barry Smith <bsmith at mcs.anl.gov>
> wrote:
>
>
>
> Subject: Re: [petsc-users] Unequal sparse matrix row
> distribution for MPI MatMult
>
> To: "Steena M" <stm8086 at yahoo.com>
>
> Cc: petsc-users at mcs.anl.gov
>
> Date: Sunday, March 22, 2015, 3:58 PM
>
>
>
>
>
>
>
> Steena,
>
>
>
> I am
>
> a little unsure of your question.
>
>
>
> 1) you can create a MPIBAIJ
>
> matrix with any distribution of block rows per process
> you
>
> want, just set the local row size for each process to
> be
>
> what you like. Use MatCreateVecs() to get
> correspondingly
>
> laid out vectors.
>
>
>
> or 2) if you have a MPIBAIJ
>
> matrix with "equal" row layout and you want a
> new
>
> one with uneven row layout you can simply use
>
> MatGetSubMatrix() to create that new matrix.
>
>
>
> Barry
>
>
>
> Unless you have another reason to have the
>
> matrix with an equal number row layout I would just
> generate
>
> the matrix with the layout you want.
>
>
>
>
>
> > On Mar 22, 2015, at 5:50 PM, Steena M
>
> <stm8086 at yahoo.com>
>
> wrote:
>
> >
>
> > Hello,
>
> >
>
> > I need to distribute
>
> a sparse matrix such that each proc owns an unequal
> number
>
> of blocked rows before I proceed with MPI MatMult. My
>
> initial thoughts on doing this:
>
> >
>
> > 1) Use MatGetSubMatrices() on the test
>
> MATMPIBAIJ matrix to produce a new matrix where each
> proc
>
> has an unequal number of rows.
>
> >
>
> > 2) Provide scatter context for vector X
>
> (for MatMult )using IS iscol from MatGetSubMatrices()
> while
>
> creating the vector X.
>
> >
>
> > 3) Call MatMult()
>
> >
>
> > Will MatMult_MPIBAIJ continue to scatter
>
> this matrix and vector such that each proc will own an
> equal
>
> number of matrix rows and corresponding diagonal vector
>
> elements? Should I write my own MPIMatMult function to
>
> retain my redistribution of the matrix and vector?
>
> >
>
> > Thanks in
>
> advance,
>
> > Steena
>
>
>
>
>
>
> --
> 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
>
More information about the petsc-users
mailing list