Actual source code: cupmcontext.hip.cpp

  1: #include "../cupmcontext.hpp" /*I "petscdevice.h" I*/

  3: using namespace Petsc::device::cupm;

  5: PetscErrorCode PetscDeviceContextCreate_HIP(PetscDeviceContext dctx)
  6: {
  7:   static constexpr auto hip_context = CUPMContextHip();

  9:   hip_context.initialize();
 10:   dctx->data = new PetscDeviceContext_(HIP);
 11:   PetscMemcpy(dctx->ops, &hip_context.ops, sizeof(hip_context.ops));
 12:   return 0;
 13: }

 15: /*
 16:  Management of HIPBLAS and HIPSOLVER handles

 18:  Unlike CUDA, hipSOLVER is just for dense matrices so there is
 19:  no distinguishing being dense and sparse.  Also, hipSOLVER is
 20:  very immature so we often have to do the mapping between roc and
 21:  cuda manually.
 22:  */

 24: PetscErrorCode PetscHIPBLASGetHandle(hipblasHandle_t *handle)
 25: {
 26:   PetscDeviceContext dctx;

 29:   PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_HIP);
 30:   PetscDeviceContextGetBLASHandle_Internal(dctx, handle);
 31:   return 0;
 32: }

 34: PetscErrorCode PetscHIPSOLVERGetHandle(hipsolverHandle_t *handle)
 35: {
 36:   PetscDeviceContext dctx;

 39:   PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_HIP);
 40:   PetscDeviceContextGetSOLVERHandle_Internal(dctx, handle);
 41:   return 0;
 42: }