1030f984aSJacob Faibussowitsch #include "../cupmcontext.hpp" /*I "petscdevice.h" I*/ 2030f984aSJacob Faibussowitsch 30e6b6b59SJacob Faibussowitsch using namespace Petsc::device::cupm; 417f48955SJacob Faibussowitsch 5d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDeviceContextCreate_CUDA(PetscDeviceContext dctx) 6d71ae5a4SJacob Faibussowitsch { 70e6b6b59SJacob Faibussowitsch static constexpr auto cuda_context = CUPMContextCuda(); 8030f984aSJacob Faibussowitsch 9030f984aSJacob Faibussowitsch PetscFunctionBegin; 106d54fb17SJacob Faibussowitsch PetscCall(cuda_context.initialize(dctx->device)); 110e6b6b59SJacob Faibussowitsch dctx->data = new PetscDeviceContext_(CUDA); 12*6ff55be4SJacob Faibussowitsch *dctx->ops = cuda_context.ops; 133ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 14030f984aSJacob Faibussowitsch } 15a4af0ceeSJacob Faibussowitsch 16a4af0ceeSJacob Faibussowitsch /* Management of CUBLAS and CUSOLVER handles */ 17d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscCUBLASGetHandle(cublasHandle_t *handle) 18d71ae5a4SJacob Faibussowitsch { 19a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx; 20a4af0ceeSJacob Faibussowitsch 21a4af0ceeSJacob Faibussowitsch PetscFunctionBegin; 22a4af0ceeSJacob Faibussowitsch PetscValidPointer(handle, 1); 239566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_CUDA)); 249566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetBLASHandle_Internal(dctx, handle)); 253ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 26a4af0ceeSJacob Faibussowitsch } 27a4af0ceeSJacob Faibussowitsch 28d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle) 29d71ae5a4SJacob Faibussowitsch { 30a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx; 31a4af0ceeSJacob Faibussowitsch 32a4af0ceeSJacob Faibussowitsch PetscFunctionBegin; 33a4af0ceeSJacob Faibussowitsch PetscValidPointer(handle, 1); 349566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_CUDA)); 359566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetSOLVERHandle_Internal(dctx, handle)); 363ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 37a4af0ceeSJacob Faibussowitsch } 38