1030f984aSJacob Faibussowitsch #include "../cupmcontext.hpp" /*I "petscdevice.h" I*/ 2030f984aSJacob Faibussowitsch 3*0e6b6b59SJacob Faibussowitsch using namespace Petsc::device::cupm; 417f48955SJacob Faibussowitsch 59371c9d4SSatish Balay PetscErrorCode PetscDeviceContextCreate_CUDA(PetscDeviceContext dctx) { 6*0e6b6b59SJacob Faibussowitsch static constexpr auto cuda_context = CUPMContextCuda(); 7030f984aSJacob Faibussowitsch 8030f984aSJacob Faibussowitsch PetscFunctionBegin; 9*0e6b6b59SJacob Faibussowitsch PetscCall(cuda_context.initialize()); 10*0e6b6b59SJacob Faibussowitsch dctx->data = new PetscDeviceContext_(CUDA); 11*0e6b6b59SJacob Faibussowitsch PetscCall(PetscMemcpy(dctx->ops, &cuda_context.ops, sizeof(cuda_context.ops))); 12030f984aSJacob Faibussowitsch PetscFunctionReturn(0); 13030f984aSJacob Faibussowitsch } 14a4af0ceeSJacob Faibussowitsch 15a4af0ceeSJacob Faibussowitsch /* Management of CUBLAS and CUSOLVER handles */ 169371c9d4SSatish Balay PetscErrorCode PetscCUBLASGetHandle(cublasHandle_t *handle) { 17a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx; 18a4af0ceeSJacob Faibussowitsch 19a4af0ceeSJacob Faibussowitsch PetscFunctionBegin; 20a4af0ceeSJacob Faibussowitsch PetscValidPointer(handle, 1); 219566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_CUDA)); 229566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetBLASHandle_Internal(dctx, handle)); 23a4af0ceeSJacob Faibussowitsch PetscFunctionReturn(0); 24a4af0ceeSJacob Faibussowitsch } 25a4af0ceeSJacob Faibussowitsch 269371c9d4SSatish Balay PetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle) { 27a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx; 28a4af0ceeSJacob Faibussowitsch 29a4af0ceeSJacob Faibussowitsch PetscFunctionBegin; 30a4af0ceeSJacob Faibussowitsch PetscValidPointer(handle, 1); 319566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_CUDA)); 329566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetSOLVERHandle_Internal(dctx, handle)); 33a4af0ceeSJacob Faibussowitsch PetscFunctionReturn(0); 34a4af0ceeSJacob Faibussowitsch } 35