1) PetscMalloc() is never valid or needed in Fortran

    2) there is no reason to use DMSetMatrixPreallocateOnly() just use 
DMCreateMatrix() assuming that using a DM (DMDA, DMPLEX, etc) is suitable for 
your problem.

    At this end we are totally guessing at what you are doing and so have 
little help we can provide.  A simple, nonworking code that tries to do what 
you would need would help us a great deal in understanding that you are trying 
to do.

     Barry





> On Aug 28, 2018, at 1:18 PM, Manuel Valera <[email protected]> wrote:
> 
> Matthew, PetscMalloc gives the same error,
> 
> Barry, it would be very hard for me to get the code to a minimum working 
> example, i guess all i need to understand is how to setup a DM matrix with 
> DMSetMatrixPreallocateOnly() instead of MatMPIAIJSetPreallocation() as we 
> were doing before, is there a simple example who does this in Fortran?
> 
> Is the PetscMalloc call needed? is 'call PetscMalloc(1,row,ierr)' a valid, 
> compilable call to PetscMalloc? what other reason may there be for this error 
> to happen ?
> 
> Just remembering, that trying to setup the matrix with the 
> MatAIJSetPreallocation() brings up an error to acknowledge the viennacl 
> datatypes and that's why i'm trying to make this change on your 
> recommendation,
> 
> Thanks for your help,
> 
> 
> 
> 
> 
> On Mon, Aug 27, 2018 at 7:35 PM, Smith, Barry F. <[email protected]> wrote:
> 
>    Send your code in a way we can compile and run it; it must be some simple 
> issue that is hard to communicate in email.
> 
>    Barry
> 
> 
> > On Aug 27, 2018, at 5:51 PM, Manuel Valera <[email protected]> wrote:
> > 
> > Hello everyone,
> > 
> > I just had time to work on this again, and checked the code for errors on 
> > the matrix entries, this is the exact code i was using for creating the 
> > matrix without DMSetMatrixPreallocateOnly, using MatMPIAIJSetPreallocation 
> > and it worked that way, but trying this way i get the same 'Column too 
> > large' error using any number at the column position of MatSetValues, 
> > 
> > I have set up my code to print the column argument (n) of MatSetValues and 
> > in this case is 7 (lower than 124), it still gives error, even entering a 
> > specific number in the MatSetValues column argument position gives the same 
> > error.
> > 
> > So next i went back to ex.50 here: 
> > http://www.mcs.anl.gov/petsc/petsc-current/src/ts/examples/tutorials/ex50.c.html
> >  and it has a very similar structure except the PetscMalloc1() call, so i 
> > tried adding that and got:
> > 
> >  /home/valera/ParGCCOM/Src/DMDALaplacian.f90:114: undefined reference to 
> > `petscmalloc1_'
> > 
> > Any ideas on this behaviour?
> > 
> > Thanks so much,
> > 
> > 
> > 
> > 
> > 
> > 
> > On Thu, Aug 16, 2018 at 11:20 AM, Smith, Barry F. <[email protected]> 
> > wrote:
> > 
> > Column too large: col 10980 max 124
> > 
> >    You need to check the code that is generating the matrix entries. The 
> > matrix has 124 columns but you are attempting to put a value at column 10980
> > 
> >    Barry
> > 
> > 
> > > On Aug 15, 2018, at 9:44 PM, Manuel Valera <[email protected]> wrote:
> > > 
> > > Thanks Matthew and Barry,
> > > 
> > > Now my code looks like:
> > > 
> > > call DMSetMatrixPreallocateOnly(daDummy,PETSC_TRUE,ierr)
> > > call DMSetMatType(daDummy,MATMPIAIJVIENNACL,ierr)
> > > call DMSetVecType(daDummy,VECMPIVIENNACL,ierr)
> > > call DMCreateMatrix(daDummy,A,ierr)
> > > call MatSetFromOptions(A,ierr)
> > > call MatSetUp(A,ierr)
> > > [...]
> > >             call 
> > > MatSetValues(A,1,row,sumpos,pos(0:iter-1),vals(0:iter-1),INSERT_VALUES,ierr)
> > > [...]
> > > call MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY, ierr)
> > > call MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY, ierr)
> > > 
> > > And i get a different error, now is:
> > > 
> > > [0]PETSC ERROR: --------------------- Error Message 
> > > --------------------------------------------------------------
> > > [0]PETSC ERROR: Argument out of range
> > > [0]PETSC ERROR: Column too large: col 10980 max 124
> > > [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html 
> > > for trouble shooting.
> > > [0]PETSC ERROR: Petsc Development GIT revision: v3.9.2-549-g779ab53  GIT 
> > > Date: 2018-05-31 17:31:13 +0300
> > > [0]PETSC ERROR: ./gcmLEP.GPU on a cuda-debug named node50 by valera Wed 
> > > Aug 15 19:40:00 2018
> > > [0]PETSC ERROR: Configure options PETSC_ARCH=cuda-debug 
> > > --with-mpi-dir=/usr/lib64/openmpi --COPTFLAGS=-O2 --CXXOPTFLAGS=-O2 
> > > --FOPTFLAGS=-O2 --with-shared-libraries=1 --with-debugging=1 
> > > --with-cuda=1 --CUDAFLAGS=-arch=sm_60 --with-blaslapack-dir=/usr/lib64 
> > > --download-viennacl
> > > [0]PETSC ERROR: #1 MatSetValues_SeqAIJ() line 442 in 
> > > /home/valera/petsc/src/mat/impls/aij/seq/aij.c
> > > [0]PETSC ERROR: #2 MatSetValues() line 1339 in 
> > > /home/valera/petsc/src/mat/interface/matrix.c
> > > 
> > > 
> > > Thanks again,
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > On Wed, Aug 15, 2018 at 7:02 PM, Smith, Barry F. <[email protected]> 
> > > wrote:
> > > 
> > >   Should be
> > > 
> > > call DMSetMatType(daDummy,MATMPIAIJVIENNACL,ierr)
> > > call DMSetVecType(daDummy,VECMPIVIENNACL,ierr)
> > > call DMCreateMatrix(daDummy,A,ierr)
> > > 
> > >   and remove the rest. You need to set the type of Mat you want the DM to 
> > > return BEFORE you create the matrix.
> > > 
> > >   Barry
> > > 
> > > 
> > > 
> > > > On Aug 15, 2018, at 4:45 PM, Manuel Valera <[email protected]> wrote:
> > > > 
> > > > Ok thanks for clarifying that, i wasn't sure if there were different 
> > > > types,
> > > > 
> > > > Here is a stripped down version of my code, it seems like the 
> > > > preallocation is working now since the matrix population part is 
> > > > working without problem, but here it is for illustration purposes:
> > > > 
> > > > call DMSetMatrixPreallocateOnly(daDummy,PETSC_TRUE,ierr)
> > > > call DMCreateMatrix(daDummy,A,ierr)
> > > > call MatSetFromOptions(A,ierr)
> > > > call DMSetMatType(daDummy,MATMPIAIJVIENNACL,ierr)
> > > > call DMSetVecType(daDummy,VECMPIVIENNACL,ierr)
> > > > call 
> > > > MatMPIAIJSetPreallocation(A,19,PETSC_NULL_INTEGER,19,PETSC_NULL_INTEGER,ierr)
> > > > call MatSetUp(A,ierr)
> > > > [...]
> > > >             call 
> > > > MatSetValues(A,1,row,sumpos,pos(0:iter-1),vals(0:iter-1),INSERT_VALUES,ierr)
> > > > [...]
> > > > call MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY, ierr)
> > > > call MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY, ierr)
> > > > 
> > > > Adding the first line there did the trick,
> > > > 
> > > > Now the problem seems to be the program is not recognizing the matrix 
> > > > as ViennaCL type when i try with more than one processor, i get now:
> > > > 
> > > > [0]PETSC ERROR: --------------------- Error Message 
> > > > --------------------------------------------------------------
> > > > [0]PETSC ERROR: No support for this operation for this object type
> > > > [0]PETSC ERROR: Currently only handles ViennaCL matrices
> > > > [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html 
> > > > for trouble shooting.
> > > > [0]PETSC ERROR: Petsc Development GIT revision: v3.9.2-549-g779ab53  
> > > > GIT Date: 2018-05-31 17:31:13 +0300
> > > > [0]PETSC ERROR: ./gcmLEP.GPU on a cuda-debug named node50 by valera Wed 
> > > > Aug 15 14:44:22 2018
> > > > [0]PETSC ERROR: Configure options PETSC_ARCH=cuda-debug 
> > > > --with-mpi-dir=/usr/lib64/openmpi --COPTFLAGS=-O2 --CXXOPTFLAGS=-O2 
> > > > --FOPTFLAGS=-O2 --with-shared-libraries=1 --with-debugging=1 
> > > > --with-cuda=1 --CUDAFLAGS=-arch=sm_60 --with-blaslapack-dir=/usr/lib64 
> > > > --download-viennacl
> > > > [0]PETSC ERROR: #1 PCSetUp_SAVIENNACL() line 47 in 
> > > > /home/valera/petsc/src/ksp/pc/impls/saviennaclcuda/saviennacl.cu
> > > > [0]PETSC ERROR: #2 PCSetUp() line 932 in 
> > > > /home/valera/petsc/src/ksp/pc/interface/precon.c
> > > > [0]PETSC ERROR: #3 KSPSetUp() line 381 in 
> > > > /home/valera/petsc/src/ksp/ksp/interface/itfunc.c
> > > > 
> > > > When running with:
> > > > 
> > > > mpirun -n 1 ./gcmLEP.GPU tc=TestCases/LockRelease/LE_6x6x6/ 
> > > > jid=tiny_cuda_test_n2 -ksp_type cg -dm_vec_type viennacl -dm_mat_type 
> > > > aijviennacl -pc_type saviennacl -log_view
> > > > 
> > > > 
> > > > Thanks,
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > On Wed, Aug 15, 2018 at 2:32 PM, Matthew Knepley <[email protected]> 
> > > > wrote:
> > > > On Wed, Aug 15, 2018 at 5:20 PM Manuel Valera <[email protected]> 
> > > > wrote:
> > > > It seems to be resumed on: I do not know how to preallocate a DM Matrix 
> > > > correctly.
> > > > 
> > > > There is only one matrix type, Mat. There are no separate DM matrices. 
> > > > A DM can create a matrix for you
> > > > using DMCreateMatrix(), but that is a Mat and it is preallocated 
> > > > correctly. I am not sure what you are doing.
> > > > 
> > > >   Thanks,
> > > > 
> > > >     Matt
> > > >  
> > > > The interesting part is that it only breaks when i need to populate a 
> > > > GPU matrix from MPI, so kudos on that, but it seems i need to do better 
> > > > on my code to get this setup working,
> > > > 
> > > > Any help would be appreciated,
> > > > 
> > > > Thanks,
> > > > 
> > > > 
> > > > 
> > > > On Wed, Aug 15, 2018 at 2:15 PM, Matthew Knepley <[email protected]> 
> > > > wrote:
> > > > On Wed, Aug 15, 2018 at 4:53 PM Manuel Valera <[email protected]> 
> > > > wrote:
> > > > Thanks Matthew, 
> > > > 
> > > > I try to do that when calling:
> > > > 
> > > > call 
> > > > MatMPIAIJSetPreallocation(A,19,PETSC_NULL_INTEGER,19,PETSC_NULL_INTEGER,ierr)
> > > > 
> > > > But i am not aware on how to do this for the DM if it needs something 
> > > > more specific/different,
> > > > 
> > > > The error says that your preallocation is wrong for the values you are 
> > > > putting in. The DM does not control either,
> > > > so I do not understand your email.
> > > > 
> > > >   Thanks,
> > > > 
> > > >      Matt
> > > >  
> > > > Thanks,
> > > > 
> > > > On Wed, Aug 15, 2018 at 1:51 PM, Matthew Knepley <[email protected]> 
> > > > wrote:
> > > > On Wed, Aug 15, 2018 at 4:39 PM Manuel Valera <[email protected]> 
> > > > wrote:
> > > > Hello PETSc devs,
> > > > 
> > > > I am running into an error when trying to use the MATMPIAIJVIENNACL 
> > > > Matrix type in MPI calls, the same code runs for MATSEQAIJVIENNACL type 
> > > > in one processor. The error happens when calling MatSetValues for this 
> > > > specific configuration. It does not occur when using MPI DMMatrix types 
> > > > only.
> > > > 
> > > > The DM properly preallocates the matrix. I am assuming you do not here.
> > > > 
> > > >    Matt
> > > >  
> > > > Any help will be appreciated, 
> > > > 
> > > > Thanks,
> > > > 
> > > > 
> > > > 
> > > > My program call:
> > > > 
> > > > mpirun -n 2 ./gcmLEP.GPU tc=TestCases/LockRelease/LE_6x6x6/ 
> > > > jid=tiny_cuda_test_n2 -ksp_type cg -dm_vec_type viennacl -dm_mat_type 
> > > > aijviennacl -pc_type saviennacl -log_view 
> > > > 
> > > > 
> > > > The error (repeats after each MatSetValues call):
> > > > 
> > > > [1]PETSC ERROR: --------------------- Error Message 
> > > > --------------------------------------------------------------
> > > > [1]PETSC ERROR: Argument out of range
> > > > [1]PETSC ERROR: Inserting a new nonzero at global row/column (75, 50) 
> > > > into matrix
> > > > [1]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html 
> > > > for trouble shooting.
> > > > [1]PETSC ERROR: Petsc Development GIT revision: v3.9.2-549-g779ab53  
> > > > GIT Date: 2018-05-31 17:31:13 +0300
> > > > [1]PETSC ERROR: ./gcmLEP.GPU on a cuda-debug named node50 by valera Wed 
> > > > Aug 15 13:10:44 2018
> > > > [1]PETSC ERROR: Configure options PETSC_ARCH=cuda-debug 
> > > > --with-mpi-dir=/usr/lib64/openmpi --COPTFLAGS=-O2 --CXXOPTFLAGS=-O2 
> > > > --FOPTFLAGS=-O2 --with-shared-libraries=1 --with-debugging=1 
> > > > --with-cuda=1 --CUDAFLAGS=-arch=sm_60 --with-blaslapack-dir=/usr/lib64 
> > > > --download-viennacl
> > > > [1]PETSC ERROR: #1 MatSetValues_MPIAIJ() line 608 in 
> > > > /home/valera/petsc/src/mat/impls/aij/mpi/mpiaij.c
> > > > [1]PETSC ERROR: #2 MatSetValues() line 1339 in 
> > > > /home/valera/petsc/src/mat/interface/matrix.c
> > > > 
> > > > 
> > > > My Code structure:
> > > > 
> > > > call DMCreateMatrix(daDummy,A,ierr)
> > > > call MatSetFromOptions(A,ierr)
> > > > call MPI_Comm_size(PETSC_COMM_WORLD, numprocs, ierr)
> > > > if (numprocs > 1) then  ! set matrix type parallel
> > > >     ! Get local size
> > > >     call DMDACreateNaturalVector(daDummy,Tmpnat,ierr)
> > > >     call VecGetLocalSize(Tmpnat,locsize,ierr)
> > > >     call VecDestroy(Tmpnat,ierr)
> > > >     ! Set matrix
> > > > #ifdef GPU
> > > >     call MatSetType(A,MATAIJVIENNACL,ierr)
> > > >     call DMSetMatType(daDummy,MATMPIAIJVIENNACL,ierr)
> > > >     call DMSetVecType(daDummy,VECMPIVIENNACL,ierr)
> > > >     print*,'SETTING GPU TYPES'
> > > > #else
> > > >     call DMSetMatType(daDummy,MATMPIAIJ,ierr)
> > > >     call DMSetMatType(daDummy,VECMPI,ierr)
> > > >     call MatSetType(A,MATMPIAIJ,ierr)!
> > > > #endif
> > > >     call 
> > > > MatMPIAIJSetPreallocation(A,19,PETSC_NULL_INTEGER,19,PETSC_NULL_INTEGER,ierr)
> > > > else                    ! set matrix type sequential
> > > > #ifdef GPU
> > > >     call DMSetMatType(daDummy,MATSEQAIJVIENNACL,ierr)
> > > >     call DMSetVecType(daDummy,VECSEQVIENNACL,ierr)
> > > >     call MatSetType(A,MATSEQAIJVIENNACL,ierr)
> > > >     print*,'SETTING GPU TYPES'
> > > > #else
> > > >     call DMSetMatType(daDummy,MATSEQAIJ,ierr)
> > > >     call DMSetMatType(daDummy,VECSEQ,ierr)
> > > >     call MatSetType(A,MATSEQAIJ,ierr)
> > > > #endif
> > > > call MatSetUp(A,ierr)
> > > > call getCenterInfo(daGrid,xstart,ystart,zstart,xend,yend,zend)
> > > >  
> > > > do k=zstart,zend-1
> > > >     do j=ystart,yend-1
> > > >         do i=xstart,xend-1
> > > > [..]
> > > >            call 
> > > > MatSetValues(A,1,row,sumpos,pos(0:iter-1),vals(0:iter-1),INSERT_VALUES,ierr)
> > > > [..]
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > -- 
> > > > 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
> > > > 
> > > > https://www.cse.buffalo.edu/~knepley/
> > > > 
> > > > 
> > > > 
> > > > -- 
> > > > 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
> > > > 
> > > > https://www.cse.buffalo.edu/~knepley/
> > > > 
> > > > 
> > > > 
> > > > -- 
> > > > 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
> > > > 
> > > > https://www.cse.buffalo.edu/~knepley/
> > > > 
> > > 
> > > 
> > 
> > 
> 
> 

Reply via email to