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*/ 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 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 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 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 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 @*/ 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