xref: /petsc/src/mat/impls/dense/seq/cupm/hip/matseqdensehip.hip.cxx (revision daba9d70159ea2f6905738fcbec7404635487b2b)
1*d52a580bSJunchao Zhang #include "../matseqdensecupm.hpp"
2*d52a580bSJunchao Zhang 
3*d52a580bSJunchao Zhang using namespace Petsc::mat::cupm;
4*d52a580bSJunchao Zhang using Petsc::device::cupm::DeviceType;
5*d52a580bSJunchao Zhang 
6*d52a580bSJunchao Zhang static constexpr impl::MatDense_Seq_CUPM<DeviceType::HIP> cupm_mat{};
7*d52a580bSJunchao Zhang 
8*d52a580bSJunchao Zhang /*MC
9*d52a580bSJunchao Zhang   MATSEQDENSEHIP - "seqdensehip" - A matrix type to be used for sequential dense matrices on
10*d52a580bSJunchao Zhang   GPUs.
11*d52a580bSJunchao Zhang 
12*d52a580bSJunchao Zhang   Options Database Keys:
13*d52a580bSJunchao Zhang . -mat_type seqdensehip - sets the matrix type to `MATSEQDENSEHIP` during a call to
14*d52a580bSJunchao Zhang                            `MatSetFromOptions()`
15*d52a580bSJunchao Zhang 
16*d52a580bSJunchao Zhang   Level: beginner
17*d52a580bSJunchao Zhang 
18*d52a580bSJunchao Zhang .seealso: `MATSEQDENSE`
19*d52a580bSJunchao Zhang M*/
MatCreate_SeqDenseHIP(Mat A)20*d52a580bSJunchao Zhang PETSC_INTERN PetscErrorCode MatCreate_SeqDenseHIP(Mat A)
21*d52a580bSJunchao Zhang {
22*d52a580bSJunchao Zhang   PetscFunctionBegin;
23*d52a580bSJunchao Zhang   PetscCall(cupm_mat.Create(A));
24*d52a580bSJunchao Zhang   PetscFunctionReturn(PETSC_SUCCESS);
25*d52a580bSJunchao Zhang }
26*d52a580bSJunchao Zhang 
MatSolverTypeRegister_DENSEHIP(void)27*d52a580bSJunchao Zhang PETSC_INTERN PetscErrorCode MatSolverTypeRegister_DENSEHIP(void)
28*d52a580bSJunchao Zhang {
29*d52a580bSJunchao Zhang   PetscFunctionBegin;
30*d52a580bSJunchao Zhang   PetscCall(impl::MatSolverTypeRegister_DENSECUPM<DeviceType::HIP>());
31*d52a580bSJunchao Zhang   PetscFunctionReturn(PETSC_SUCCESS);
32*d52a580bSJunchao Zhang }
33*d52a580bSJunchao Zhang 
MatConvert_SeqDense_SeqDenseHIP(Mat A,MatType newtype,MatReuse reuse,Mat * newmat)34*d52a580bSJunchao Zhang PetscErrorCode MatConvert_SeqDense_SeqDenseHIP(Mat A, MatType newtype, MatReuse reuse, Mat *newmat)
35*d52a580bSJunchao Zhang {
36*d52a580bSJunchao Zhang   PetscFunctionBegin;
37*d52a580bSJunchao Zhang   PetscCall(cupm_mat.Convert_SeqDense_SeqDenseCUPM(A, newtype, reuse, newmat));
38*d52a580bSJunchao Zhang   PetscFunctionReturn(PETSC_SUCCESS);
39*d52a580bSJunchao Zhang }
40*d52a580bSJunchao Zhang 
MatMatMultNumeric_SeqDenseHIP_SeqDenseHIP_Internal(Mat A,Mat B,Mat C,PetscBool TA,PetscBool TB)41*d52a580bSJunchao Zhang PetscErrorCode MatMatMultNumeric_SeqDenseHIP_SeqDenseHIP_Internal(Mat A, Mat B, Mat C, PetscBool TA, PetscBool TB)
42*d52a580bSJunchao Zhang {
43*d52a580bSJunchao Zhang   PetscFunctionBegin;
44*d52a580bSJunchao Zhang   PetscCall(impl::MatMatMultNumeric_SeqDenseCUPM_SeqDenseCUPM<DeviceType::HIP>(A, B, C, TA, TB));
45*d52a580bSJunchao Zhang   PetscFunctionReturn(PETSC_SUCCESS);
46*d52a580bSJunchao Zhang }
47*d52a580bSJunchao Zhang 
MatSeqDenseHIPInvertFactors_Internal(Mat A)48*d52a580bSJunchao Zhang PetscErrorCode MatSeqDenseHIPInvertFactors_Internal(Mat A)
49*d52a580bSJunchao Zhang {
50*d52a580bSJunchao Zhang   PetscFunctionBegin;
51*d52a580bSJunchao Zhang   PetscCall(cupm_mat.InvertFactors(A));
52*d52a580bSJunchao Zhang   PetscFunctionReturn(PETSC_SUCCESS);
53*d52a580bSJunchao Zhang }
54*d52a580bSJunchao Zhang 
55*d52a580bSJunchao Zhang /*@C
56*d52a580bSJunchao Zhang   MatCreateSeqDenseHIP - Creates a sequential matrix in dense format using HIP.
57*d52a580bSJunchao Zhang 
58*d52a580bSJunchao Zhang   Collective
59*d52a580bSJunchao Zhang 
60*d52a580bSJunchao Zhang   Input Parameters:
61*d52a580bSJunchao Zhang + comm - MPI communicator
62*d52a580bSJunchao Zhang . m    - number of rows
63*d52a580bSJunchao Zhang . n    - number of columns
64*d52a580bSJunchao Zhang - data - optional location of GPU matrix data. Pass `NULL` to let PETSc to control matrix
65*d52a580bSJunchao Zhang          memory allocation
66*d52a580bSJunchao Zhang 
67*d52a580bSJunchao Zhang   Output Parameter:
68*d52a580bSJunchao Zhang . A - the matrix
69*d52a580bSJunchao Zhang 
70*d52a580bSJunchao Zhang   Level: intermediate
71*d52a580bSJunchao Zhang 
72*d52a580bSJunchao Zhang .seealso: `MATSEQDENSE`, `MatCreate()`, `MatCreateSeqDense()`
73*d52a580bSJunchao Zhang @*/
MatCreateSeqDenseHIP(MPI_Comm comm,PetscInt m,PetscInt n,PetscScalar * data,Mat * A)74*d52a580bSJunchao Zhang PetscErrorCode MatCreateSeqDenseHIP(MPI_Comm comm, PetscInt m, PetscInt n, PetscScalar *data, Mat *A)
75*d52a580bSJunchao Zhang {
76*d52a580bSJunchao Zhang   PetscFunctionBegin;
77*d52a580bSJunchao Zhang   PetscCall(MatCreateSeqDenseCUPM<DeviceType::HIP>(comm, m, n, data, A));
78*d52a580bSJunchao Zhang   PetscFunctionReturn(PETSC_SUCCESS);
79*d52a580bSJunchao Zhang }
80