xref: /petsc/src/sys/objects/device/impls/cupm/cuda/cupmcontext.cu (revision a4af0ceea8a251db97ee0dc5c0d52d4adf50264a)
1030f984aSJacob Faibussowitsch #include "../cupmcontext.hpp" /*I "petscdevice.h" I*/
2030f984aSJacob Faibussowitsch 
3030f984aSJacob Faibussowitsch PetscErrorCode PetscDeviceContextCreate_CUDA(PetscDeviceContext dctx)
4030f984aSJacob Faibussowitsch {
5030f984aSJacob Faibussowitsch   static const Petsc::CUPMContextCuda  contextCuda;
6030f984aSJacob Faibussowitsch   PetscDeviceContext_(CUDA)           *dci;
7030f984aSJacob Faibussowitsch   PetscErrorCode                       ierr;
8030f984aSJacob Faibussowitsch 
9030f984aSJacob Faibussowitsch   PetscFunctionBegin;
10030f984aSJacob Faibussowitsch   ierr = PetscNew(&dci);CHKERRQ(ierr);
11*a4af0ceeSJacob Faibussowitsch   dctx->data = static_cast<decltype(dctx->data)>(dci);
12030f984aSJacob Faibussowitsch   ierr = PetscMemcpy(dctx->ops,&contextCuda.ops,sizeof(contextCuda.ops));CHKERRQ(ierr);
13030f984aSJacob Faibussowitsch   PetscFunctionReturn(0);
14030f984aSJacob Faibussowitsch }
15*a4af0ceeSJacob Faibussowitsch 
16*a4af0ceeSJacob Faibussowitsch /* Management of CUBLAS and CUSOLVER handles */
17*a4af0ceeSJacob Faibussowitsch PetscErrorCode PetscCUBLASGetHandle(cublasHandle_t *handle)
18*a4af0ceeSJacob Faibussowitsch {
19*a4af0ceeSJacob Faibussowitsch   PetscDeviceContext dctx;
20*a4af0ceeSJacob Faibussowitsch   PetscErrorCode     ierr;
21*a4af0ceeSJacob Faibussowitsch 
22*a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
23*a4af0ceeSJacob Faibussowitsch   PetscValidPointer(handle,1);
24*a4af0ceeSJacob Faibussowitsch   ierr = PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx,PETSC_DEVICE_CUDA);CHKERRQ(ierr);
25*a4af0ceeSJacob Faibussowitsch   ierr = PetscDeviceContextGetBLASHandle_Internal(dctx,handle);CHKERRQ(ierr);
26*a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
27*a4af0ceeSJacob Faibussowitsch }
28*a4af0ceeSJacob Faibussowitsch 
29*a4af0ceeSJacob Faibussowitsch PetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle)
30*a4af0ceeSJacob Faibussowitsch {
31*a4af0ceeSJacob Faibussowitsch   PetscDeviceContext dctx;
32*a4af0ceeSJacob Faibussowitsch   PetscErrorCode     ierr;
33*a4af0ceeSJacob Faibussowitsch 
34*a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
35*a4af0ceeSJacob Faibussowitsch   PetscValidPointer(handle,1);
36*a4af0ceeSJacob Faibussowitsch   ierr = PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx,PETSC_DEVICE_CUDA);CHKERRQ(ierr);
37*a4af0ceeSJacob Faibussowitsch   ierr = PetscDeviceContextGetSOLVERHandle_Internal(dctx,handle);CHKERRQ(ierr);
38*a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
39*a4af0ceeSJacob Faibussowitsch }
40