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:   PetscFunctionBegin;
 10:   PetscCall(hip_context.initialize(dctx->device));
 11:   dctx->data = new PetscDeviceContext_(HIP);
 12:   *dctx->ops = hip_context.ops;
 13:   PetscFunctionReturn(PETSC_SUCCESS);
 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;

 29:   PetscFunctionBegin;
 30:   PetscAssertPointer(handle, 1);
 31:   PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_HIP));
 32:   PetscCall(PetscDeviceContextGetBLASHandle_Internal(dctx, handle));
 33:   PetscFunctionReturn(PETSC_SUCCESS);
 34: }

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

 40:   PetscFunctionBegin;
 41:   PetscAssertPointer(handle, 1);
 42:   PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_HIP));
 43:   PetscCall(PetscDeviceContextGetSOLVERHandle_Internal(dctx, handle));
 44:   PetscFunctionReturn(PETSC_SUCCESS);
 45: }

 47: PetscErrorCode PetscGetCurrentHIPStream(hipStream_t *stream)
 48: {
 49:   PetscDeviceContext dctx;
 50:   void              *handle;

 52:   PetscFunctionBegin;
 53:   PetscAssertPointer(stream, 1);
 54:   PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_HIP));
 55:   PetscCall(PetscDeviceContextGetStreamHandle(dctx, &handle));
 56:   *stream = *(hipStream_t *)handle;
 57:   PetscFunctionReturn(PETSC_SUCCESS);
 58: }