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*7a101e5eSJacob Faibussowitsch PetscCall(contextCuda.initialize()); 129566063dSJacob Faibussowitsch PetscCall(PetscNew(&dci)); 13a4af0ceeSJacob Faibussowitsch dctx->data = static_cast<decltype(dctx->data)>(dci); 149566063dSJacob Faibussowitsch PetscCall(PetscMemcpy(dctx->ops,&contextCuda.ops,sizeof(contextCuda.ops))); 15030f984aSJacob Faibussowitsch PetscFunctionReturn(0); 16030f984aSJacob Faibussowitsch } 17a4af0ceeSJacob Faibussowitsch 18a4af0ceeSJacob Faibussowitsch /* Management of CUBLAS and CUSOLVER handles */ 19a4af0ceeSJacob Faibussowitsch PetscErrorCode PetscCUBLASGetHandle(cublasHandle_t *handle) 20a4af0ceeSJacob Faibussowitsch { 21a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx; 22a4af0ceeSJacob Faibussowitsch 23a4af0ceeSJacob Faibussowitsch PetscFunctionBegin; 24a4af0ceeSJacob Faibussowitsch PetscValidPointer(handle,1); 259566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx,PETSC_DEVICE_CUDA)); 269566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetBLASHandle_Internal(dctx,handle)); 27a4af0ceeSJacob Faibussowitsch PetscFunctionReturn(0); 28a4af0ceeSJacob Faibussowitsch } 29a4af0ceeSJacob Faibussowitsch 30a4af0ceeSJacob Faibussowitsch PetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle) 31a4af0ceeSJacob Faibussowitsch { 32a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx; 33a4af0ceeSJacob Faibussowitsch 34a4af0ceeSJacob Faibussowitsch PetscFunctionBegin; 35a4af0ceeSJacob Faibussowitsch PetscValidPointer(handle,1); 369566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx,PETSC_DEVICE_CUDA)); 379566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetSOLVERHandle_Internal(dctx,handle)); 38a4af0ceeSJacob Faibussowitsch PetscFunctionReturn(0); 39a4af0ceeSJacob Faibussowitsch } 40