xref: /petsc/src/sys/objects/device/impls/cupm/cuda/cupmcontext.cu (revision 9566063d113dddea24716c546802770db7481bc0)
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*9566063dSJacob Faibussowitsch   PetscCall(PetscNew(&dci));
12a4af0ceeSJacob Faibussowitsch   dctx->data = static_cast<decltype(dctx->data)>(dci);
13*9566063dSJacob Faibussowitsch   PetscCall(PetscMemcpy(dctx->ops,&contextCuda.ops,sizeof(contextCuda.ops)));
14030f984aSJacob Faibussowitsch   PetscFunctionReturn(0);
15030f984aSJacob Faibussowitsch }
16a4af0ceeSJacob Faibussowitsch 
17a4af0ceeSJacob Faibussowitsch /* Management of CUBLAS and CUSOLVER handles */
18a4af0ceeSJacob Faibussowitsch PetscErrorCode PetscCUBLASGetHandle(cublasHandle_t *handle)
19a4af0ceeSJacob Faibussowitsch {
20a4af0ceeSJacob Faibussowitsch   PetscDeviceContext dctx;
21a4af0ceeSJacob Faibussowitsch 
22a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
23a4af0ceeSJacob Faibussowitsch   PetscValidPointer(handle,1);
24*9566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx,PETSC_DEVICE_CUDA));
25*9566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextGetBLASHandle_Internal(dctx,handle));
26a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
27a4af0ceeSJacob Faibussowitsch }
28a4af0ceeSJacob Faibussowitsch 
29a4af0ceeSJacob Faibussowitsch PetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle)
30a4af0ceeSJacob Faibussowitsch {
31a4af0ceeSJacob Faibussowitsch   PetscDeviceContext dctx;
32a4af0ceeSJacob Faibussowitsch 
33a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
34a4af0ceeSJacob Faibussowitsch   PetscValidPointer(handle,1);
35*9566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx,PETSC_DEVICE_CUDA));
36*9566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextGetSOLVERHandle_Internal(dctx,handle));
37a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
38a4af0ceeSJacob Faibussowitsch }
39