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     contextHip = CUPMContextHip();
  8:   PetscDeviceContext_(HIP) *dci;

 10:   PetscNew(&dci);
 11:   dctx->data = static_cast<decltype(dctx->data)>(dci);
 12:   PetscMemcpy(dctx->ops,&contextHip.ops,sizeof(contextHip.ops));
 13:   return 0;
 14: }

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

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

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

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

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

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