[petsc-users] Unequal sparse matrix row distribution for MPI MatMult

Steena M stm8086 at yahoo.com
Tue Mar 31 18:51:57 CDT 2015


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. 
--------------------------------------------
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
 > 
 


More information about the petsc-users mailing list