[petsc-users] Unequal sparse matrix row distribution for MPI MatMult
Barry Smith
bsmith at mcs.anl.gov
Wed Apr 1 14:24:01 CDT 2015
Send a data file you generated and your reader program and we'll debug it.
Barry
> On Apr 1, 2015, at 2:18 PM, Steena M <stm8086 at yahoo.com> wrote:
>
> Thanks Barry. I removed the Preallocation calls. It is still complaining about the malloc and incorrect data in the matrix file. I generate binary matrix files using PETSc's pythonscript to loop through a set of UFL sparse matrices. For this use case:
>
> mtx_mat = scipy.io.mmread('trefethen.mtx')
> PetscBinaryIO.PetscBinaryIO().writeMatSciPy(open('trefnew.dat','w'), mtx_mat)
>
>
>
>
>
>
> On Tuesday, March 31, 2015 9:15 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
>
>
> You should not need to call any preallocation routines when using MatLoad()
>
>
> How did you generate the file? Are you sure it has the correct information for the matrix?
>
> Barry
>
>
>
> > On Mar 31, 2015, at 11:05 PM, Steena M <stm8086 at yahoo.com> wrote:
> >
> > Thanks Matt. I'm still getting the malloc error
> >
> > [0]PETSC ERROR: Argument out of range!
> > [0]PETSC ERROR: New nonzero at (2,18) caused a malloc!
> >
> > and
> >
> > a new incorrect matrix file error:
> >
> > [0]PETSC ERROR: Unexpected data in file!
> > [0]PETSC ERROR: not matrix object!
> >
> > Maybe the order of calls is mixed up. This is the code snippet:
> >
> > if (rank ==0)
> > {
> > PetscPrintf (PETSC_COMM_WORLD,"\n On rank %d ", rank);
> >
> > CHKERRQ(MatSetSizes(A, 15, PETSC_DETERMINE, 20, 20));
> > CHKERRQ(MatSetType(A, MATMPIBAIJ));
> > CHKERRQ( MatMPIBAIJSetPreallocation(A,1,1,NULL,1,NULL));
> > CHKERRQ( MatLoad(A,fd));
> > CHKERRQ(MatSetOption(A,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_FALSE));
> > }
> >
> > else
> > {
> > PetscPrintf (PETSC_COMM_WORLD,"\n On rank %d ", rank);
> >
> > CHKERRQ( MatSetSizes(A, 5, PETSC_DETERMINE, 20, 20) );
> > CHKERRQ(MatSetType(A, MATMPIBAIJ));
> > CHKERRQ( MatMPIBAIJSetPreallocation(A,1,1,NULL,1,NULL));
> > CHKERRQ(MatLoad(A,fd));
> > CHKERRQ(MatSetOption(A,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_FALSE));
> > }
> >
> > Is there something I'm missing?
> >
> > Thanks,
> > Steena
> >
> >
> >
> >
> >
> > On Tuesday, March 31, 2015 6:10 PM, Matthew Knepley <knepley at gmail.com> wrote:
> >
> >
> > On Tue, Mar 31, 2015 at 6:51 PM, Steena M <stm8086 at yahoo.com> wrote:
> > Thanks Barry. I'm still getting the malloc error with NULL. Is there a way to distribute the matrix without explicit preallocation? Different matrices will be loaded during runtime and assigning preallocation parameters would mean an additional preprocessing step.
> >
> > 1) MatSetOption(MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE)
> >
> > 2) Note that this is never ever ever more efficient than making another pass and preallocating
> >
> > Thanks,
> >
> > Matt
> > --------------------------------------------
> > On Sun, 3/29/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: "Matthew Knepley" <knepley at gmail.com>, petsc-users at mcs.anl.gov
> > Date: Sunday, March 29, 2015, 9:26 PM
> >
> >
> > > 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
> >
> > >
> >
> >
> >
> >
> > --
> > 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