1030f984aSJacob Faibussowitsch #include "../cupmcontext.hpp" /*I "petscdevice.h" I*/ 2030f984aSJacob Faibussowitsch 317f48955SJacob Faibussowitsch using namespace Petsc::Device::CUPM; 417f48955SJacob Faibussowitsch 5*9371c9d4SSatish Balay PetscErrorCode PetscDeviceContextCreate_CUDA(PetscDeviceContext dctx) { 617f48955SJacob Faibussowitsch static constexpr auto contextCuda = CUPMContextCuda(); 7030f984aSJacob Faibussowitsch PetscDeviceContext_(CUDA) * dci; 8030f984aSJacob Faibussowitsch 9030f984aSJacob Faibussowitsch PetscFunctionBegin; 107a101e5eSJacob Faibussowitsch PetscCall(contextCuda.initialize()); 119566063dSJacob Faibussowitsch PetscCall(PetscNew(&dci)); 12a4af0ceeSJacob Faibussowitsch dctx->data = static_cast<decltype(dctx->data)>(dci); 139566063dSJacob Faibussowitsch PetscCall(PetscMemcpy(dctx->ops, &contextCuda.ops, sizeof(contextCuda.ops))); 14030f984aSJacob Faibussowitsch PetscFunctionReturn(0); 15030f984aSJacob Faibussowitsch } 16a4af0ceeSJacob Faibussowitsch 17a4af0ceeSJacob Faibussowitsch /* Management of CUBLAS and CUSOLVER handles */ 18*9371c9d4SSatish Balay PetscErrorCode PetscCUBLASGetHandle(cublasHandle_t *handle) { 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*9371c9d4SSatish Balay PetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle) { 29a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx; 30a4af0ceeSJacob Faibussowitsch 31a4af0ceeSJacob Faibussowitsch PetscFunctionBegin; 32a4af0ceeSJacob Faibussowitsch PetscValidPointer(handle, 1); 339566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_CUDA)); 349566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetSOLVERHandle_Internal(dctx, handle)); 35a4af0ceeSJacob Faibussowitsch PetscFunctionReturn(0); 36a4af0ceeSJacob Faibussowitsch } 37