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