1: #include "../cupmcontext.hpp" /*I "petscdevice.h" I*/ 3: using namespace Petsc::Device::CUPM; 5: PetscErrorCode PetscDeviceContextCreate_CUDA(PetscDeviceContext dctx) 6: { 7: static constexpr auto contextCuda = CUPMContextCuda(); 8: PetscDeviceContext_(CUDA) *dci; 10: PetscNew(&dci); 11: dctx->data = static_cast<decltype(dctx->data)>(dci); 12: PetscMemcpy(dctx->ops,&contextCuda.ops,sizeof(contextCuda.ops)); 13: return 0; 14: } 16: /* Management of CUBLAS and CUSOLVER handles */ 17: PetscErrorCode PetscCUBLASGetHandle(cublasHandle_t *handle) 18: { 19: PetscDeviceContext dctx; 22: PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx,PETSC_DEVICE_CUDA); 23: PetscDeviceContextGetBLASHandle_Internal(dctx,handle); 24: return 0; 25: } 27: PetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle) 28: { 29: PetscDeviceContext dctx; 32: PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx,PETSC_DEVICE_CUDA); 33: PetscDeviceContextGetSOLVERHandle_Internal(dctx,handle); 34: return 0; 35: }