xref: /petsc/src/sys/objects/device/impls/cupm/cuda/cupmcontext.cu (revision 6ff55be4c35e0b9e059c2f688ff7decaa29f08d7)
1030f984aSJacob Faibussowitsch #include "../cupmcontext.hpp" /*I "petscdevice.h" I*/
2030f984aSJacob Faibussowitsch 
30e6b6b59SJacob Faibussowitsch using namespace Petsc::device::cupm;
417f48955SJacob Faibussowitsch 
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);
12*6ff55be4SJacob Faibussowitsch   *dctx->ops = cuda_context.ops;
133ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
14030f984aSJacob Faibussowitsch }
15a4af0ceeSJacob Faibussowitsch 
16a4af0ceeSJacob Faibussowitsch /* Management of CUBLAS and CUSOLVER handles */
17d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscCUBLASGetHandle(cublasHandle_t *handle)
18d71ae5a4SJacob Faibussowitsch {
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));
253ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
26a4af0ceeSJacob Faibussowitsch }
27a4af0ceeSJacob Faibussowitsch 
28d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle)
29d71ae5a4SJacob Faibussowitsch {
30a4af0ceeSJacob Faibussowitsch   PetscDeviceContext dctx;
31a4af0ceeSJacob Faibussowitsch 
32a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
33a4af0ceeSJacob Faibussowitsch   PetscValidPointer(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