[petsc-dev] Adding Seq Dense MAGMA Mat

Barry Smith bsmith at mcs.anl.gov
Mon Aug 26 17:19:21 CDT 2013


On Aug 26, 2013, at 4:24 PM, Harshad Sahasrabudhe <hsahasra at purdue.edu> wrote:

> Hi Barry,
> 
> Here is my analysis, please correct if I'm wrong:
> 
> For using the MatGetFactor() mechanism, I need to define MATSOLVERMAGMA in petscmat.h. I also need to define the functions MatFactorGetSolverPackage_SeqDense_magma(), MatGetFactor_SeqDense_magma() in dense.c
> 
> I'm not creating a new matrix class, so I think I don't need to add anything to MatRegisterAll()
> 
> I don't understand the following:
> How does PETSc figure out that there is an additional solver present? Do I need to define any other variables or add anything for this?

   In MatCreate_SeqDense() note the line 
  ierr = PetscObjectComposeFunction((PetscObject)B,"MatGetFactor_petsc_C",MatGetFactor_seqdense_petsc);CHKERRQ(ierr);

you will add an additional line (protected by ifdef for magma being available that registers your routine

 ierr = PetscObjectComposeFunction((PetscObject)B,"MatGetFactor_magma_C",MatGetFactor_seqdense_magma);CHKERRQ(ierr);

   Barrt

> 

> What else do I need to change if I have to add the functions MatSolve_SeqDense_magma() and MatMatMult_magma() (for magma_xgemm dense matrix multiplication).
> 
> Harshad
> 
> 
> ----- Original Message -----
> From: "Barry Smith" <bsmith at mcs.anl.gov>
> To: "Harshad Sahasrabudhe" <hsahasra at purdue.edu>
> Cc: "For users of the development version of PETSc" <petsc-dev at mcs.anl.gov>
> Sent: Tuesday, August 20, 2013 7:10:40 PM
> Subject: Re: [petsc-dev] Adding Seq Dense MAGMA Mat
> 
> 
>   How general do you plan for this "magma" matrix class to be? If it all it is for is to do LU/Cholesky factorizations then you do NOT need to introduce src/mat/impls/dense/seq/magma at all. Simply use the MatGetFactor() mechanism to "How will the user be able to access this function?".   This is definitely the easy way to go.
> 
>   If you want to use the "magma" matrix class for all kinds of non-factorization matrix operations then you need to write a full magma matrix class. I don't recommend this.
> 
>   Barry
> 
> On Aug 20, 2013, at 1:35 PM, Harshad Sahasrabudhe <hsahasra at purdue.edu> wrote:
> 
>> Hi,
>> 
>> I am working on adding the Seq Dense MAGMA matrix type. For this, I have created the following files and directories:
>> 
>> src/mat/impls/dense/seq/magma
>> src/mat/impls/dense/seq/magma/magma.c
>> src/mat/impls/dense/seq/magma/makefile
>> 
>> Right now I am just trying the make LU factorization work through MAGMA. Barry had suggested looking at dense.c, as the MAGMA function for LU has the same sequence as the LAPACK function getrf. MAGMA does the memory allocation on the GPU inside it's function magma_?getrf. So can I directly use the matrix type declared in dense.c, and just define a function MatLUFactor_SeqDense_MAGMA magma.c which uses the same matrix type?
>> 
>> How will the user be able to access this function?
>> 
>> Thanks,
>> Harshad
> 




More information about the petsc-dev mailing list