1030f984aSJacob Faibussowitsch #include "../cupmcontext.hpp" /*I "petscdevice.h" I*/ 2030f984aSJacob Faibussowitsch 30e6b6b59SJacob Faibussowitsch using namespace Petsc::device::cupm; 417f48955SJacob Faibussowitsch 5*d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDeviceContextCreate_CUDA(PetscDeviceContext dctx) 6*d71ae5a4SJacob Faibussowitsch { 70e6b6b59SJacob Faibussowitsch static constexpr auto cuda_context = CUPMContextCuda(); 8030f984aSJacob Faibussowitsch 9030f984aSJacob Faibussowitsch PetscFunctionBegin; 100e6b6b59SJacob Faibussowitsch PetscCall(cuda_context.initialize()); 110e6b6b59SJacob Faibussowitsch dctx->data = new PetscDeviceContext_(CUDA); 120e6b6b59SJacob Faibussowitsch PetscCall(PetscMemcpy(dctx->ops, &cuda_context.ops, sizeof(cuda_context.ops))); 13030f984aSJacob Faibussowitsch PetscFunctionReturn(0); 14030f984aSJacob Faibussowitsch } 15a4af0ceeSJacob Faibussowitsch 16a4af0ceeSJacob Faibussowitsch /* Management of CUBLAS and CUSOLVER handles */ 17*d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscCUBLASGetHandle(cublasHandle_t *handle) 18*d71ae5a4SJacob 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)); 25a4af0ceeSJacob Faibussowitsch PetscFunctionReturn(0); 26a4af0ceeSJacob Faibussowitsch } 27a4af0ceeSJacob Faibussowitsch 28*d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle) 29*d71ae5a4SJacob 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)); 36a4af0ceeSJacob Faibussowitsch PetscFunctionReturn(0); 37a4af0ceeSJacob Faibussowitsch } 38