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