1030f984aSJacob Faibussowitsch #include "../cupmcontext.hpp" /*I "petscdevice.h" I*/ 2030f984aSJacob Faibussowitsch 30e6b6b59SJacob Faibussowitsch using namespace Petsc::device::cupm; 417f48955SJacob Faibussowitsch PetscDeviceContextCreate_CUDA(PetscDeviceContext dctx)5d71ae5a4SJacob FaibussowitschPetscErrorCode PetscDeviceContextCreate_CUDA(PetscDeviceContext dctx) 6d71ae5a4SJacob Faibussowitsch { 70e6b6b59SJacob Faibussowitsch static constexpr auto cuda_context = CUPMContextCuda(); 8030f984aSJacob Faibussowitsch 9030f984aSJacob Faibussowitsch PetscFunctionBegin; 106d54fb17SJacob Faibussowitsch PetscCall(cuda_context.initialize(dctx->device)); 110e6b6b59SJacob Faibussowitsch dctx->data = new PetscDeviceContext_(CUDA); 126ff55be4SJacob Faibussowitsch *dctx->ops = cuda_context.ops; 133ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 14030f984aSJacob Faibussowitsch } 15a4af0ceeSJacob Faibussowitsch 16a4af0ceeSJacob Faibussowitsch /* Management of CUBLAS and CUSOLVER handles */ PetscCUBLASGetHandle(cublasHandle_t * handle)17d71ae5a4SJacob FaibussowitschPetscErrorCode PetscCUBLASGetHandle(cublasHandle_t *handle) 18d71ae5a4SJacob Faibussowitsch { 19a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx; 20a4af0ceeSJacob Faibussowitsch 21a4af0ceeSJacob Faibussowitsch PetscFunctionBegin; 224f572ea9SToby Isaac PetscAssertPointer(handle, 1); 239566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_CUDA)); 249566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetBLASHandle_Internal(dctx, handle)); 253ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 26a4af0ceeSJacob Faibussowitsch } 27a4af0ceeSJacob Faibussowitsch PetscCUSOLVERDnGetHandle(cusolverDnHandle_t * handle)28d71ae5a4SJacob FaibussowitschPetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle) 29d71ae5a4SJacob Faibussowitsch { 30a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx; 31a4af0ceeSJacob Faibussowitsch 32a4af0ceeSJacob Faibussowitsch PetscFunctionBegin; 334f572ea9SToby Isaac PetscAssertPointer(handle, 1); 349566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_CUDA)); 359566063dSJacob Faibussowitsch PetscCall(PetscDeviceContextGetSOLVERHandle_Internal(dctx, handle)); 363ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 37a4af0ceeSJacob Faibussowitsch } 38*5c127019SJunchao Zhang PetscGetCurrentCUDAStream(cudaStream_t * stream)39*5c127019SJunchao ZhangPetscErrorCode PetscGetCurrentCUDAStream(cudaStream_t *stream) 40*5c127019SJunchao Zhang { 41*5c127019SJunchao Zhang PetscDeviceContext dctx; 42*5c127019SJunchao Zhang void *handle; 43*5c127019SJunchao Zhang 44*5c127019SJunchao Zhang PetscFunctionBegin; 45*5c127019SJunchao Zhang PetscAssertPointer(stream, 1); 46*5c127019SJunchao Zhang PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_CUDA)); 47*5c127019SJunchao Zhang PetscCall(PetscDeviceContextGetStreamHandle(dctx, &handle)); 48*5c127019SJunchao Zhang *stream = *(cudaStream_t *)handle; 49*5c127019SJunchao Zhang PetscFunctionReturn(PETSC_SUCCESS); 50*5c127019SJunchao Zhang } 51