1030f984aSJacob Faibussowitsch #include "../cupmcontext.hpp" /*I "petscdevice.h" I*/ 2030f984aSJacob Faibussowitsch 317f48955SJacob Faibussowitsch using namespace Petsc::Device::CUPM; 417f48955SJacob Faibussowitsch 5030f984aSJacob Faibussowitsch PetscErrorCode PetscDeviceContextCreate_CUDA(PetscDeviceContext dctx) 6030f984aSJacob Faibussowitsch { 717f48955SJacob Faibussowitsch static constexpr auto contextCuda = CUPMContextCuda(); 8030f984aSJacob Faibussowitsch PetscDeviceContext_(CUDA) *dci; 9030f984aSJacob Faibussowitsch 10030f984aSJacob Faibussowitsch PetscFunctionBegin; 11*9566063dSJacob Faibussowitsch PetscCall(PetscNew(&dci)); 12a4af0ceeSJacob Faibussowitsch dctx->data = static_cast<decltype(dctx->data)>(dci); 13*9566063dSJacob 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 */ 18a4af0ceeSJacob Faibussowitsch PetscErrorCode PetscCUBLASGetHandle(cublasHandle_t *handle) 19a4af0ceeSJacob Faibussowitsch { 20a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx; 21a4af0ceeSJacob Faibussowitsch 22a4af0ceeSJacob Faibussowitsch PetscFunctionBegin; 23a4af0ceeSJacob Faibussowitsch PetscValidPointer(handle,1); 24*9566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx,PETSC_DEVICE_CUDA)); 25*9566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetBLASHandle_Internal(dctx,handle)); 26a4af0ceeSJacob Faibussowitsch PetscFunctionReturn(0); 27a4af0ceeSJacob Faibussowitsch } 28a4af0ceeSJacob Faibussowitsch 29a4af0ceeSJacob Faibussowitsch PetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle) 30a4af0ceeSJacob Faibussowitsch { 31a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx; 32a4af0ceeSJacob Faibussowitsch 33a4af0ceeSJacob Faibussowitsch PetscFunctionBegin; 34a4af0ceeSJacob Faibussowitsch PetscValidPointer(handle,1); 35*9566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx,PETSC_DEVICE_CUDA)); 36*9566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetSOLVERHandle_Internal(dctx,handle)); 37a4af0ceeSJacob Faibussowitsch PetscFunctionReturn(0); 38a4af0ceeSJacob Faibussowitsch } 39