xref: /petsc/src/sys/objects/device/impls/cupm/cuda/cupmcontext.cu (revision 106764d3bf9ab73ad6e10134488d6054dfa31277)
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 Faibussowitsch PetscErrorCode 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 Faibussowitsch PetscErrorCode 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 Faibussowitsch PetscErrorCode 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 Zhang PetscErrorCode 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