xref: /petsc/src/sys/objects/device/impls/cupm/cuda/cupmcontext.cu (revision 17f48955e3445b92d4f06cdd133e9c1d2d0ea0c8)
1030f984aSJacob Faibussowitsch #include "../cupmcontext.hpp" /*I "petscdevice.h" I*/
2030f984aSJacob Faibussowitsch 
3*17f48955SJacob Faibussowitsch using namespace Petsc::Device::CUPM;
4*17f48955SJacob Faibussowitsch 
5030f984aSJacob Faibussowitsch PetscErrorCode PetscDeviceContextCreate_CUDA(PetscDeviceContext dctx)
6030f984aSJacob Faibussowitsch {
7*17f48955SJacob Faibussowitsch   static constexpr auto     contextCuda = CUPMContextCuda();
8030f984aSJacob Faibussowitsch   PetscDeviceContext_(CUDA) *dci;
9030f984aSJacob Faibussowitsch   PetscErrorCode            ierr;
10030f984aSJacob Faibussowitsch 
11030f984aSJacob Faibussowitsch   PetscFunctionBegin;
12030f984aSJacob Faibussowitsch   ierr = PetscNew(&dci);CHKERRQ(ierr);
13a4af0ceeSJacob Faibussowitsch   dctx->data = static_cast<decltype(dctx->data)>(dci);
14030f984aSJacob Faibussowitsch   ierr = PetscMemcpy(dctx->ops,&contextCuda.ops,sizeof(contextCuda.ops));CHKERRQ(ierr);
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   PetscErrorCode     ierr;
23a4af0ceeSJacob Faibussowitsch 
24a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
25a4af0ceeSJacob Faibussowitsch   PetscValidPointer(handle,1);
26a4af0ceeSJacob Faibussowitsch   ierr = PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx,PETSC_DEVICE_CUDA);CHKERRQ(ierr);
27a4af0ceeSJacob Faibussowitsch   ierr = PetscDeviceContextGetBLASHandle_Internal(dctx,handle);CHKERRQ(ierr);
28a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
29a4af0ceeSJacob Faibussowitsch }
30a4af0ceeSJacob Faibussowitsch 
31a4af0ceeSJacob Faibussowitsch PetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle)
32a4af0ceeSJacob Faibussowitsch {
33a4af0ceeSJacob Faibussowitsch   PetscDeviceContext dctx;
34a4af0ceeSJacob Faibussowitsch   PetscErrorCode     ierr;
35a4af0ceeSJacob Faibussowitsch 
36a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
37a4af0ceeSJacob Faibussowitsch   PetscValidPointer(handle,1);
38a4af0ceeSJacob Faibussowitsch   ierr = PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx,PETSC_DEVICE_CUDA);CHKERRQ(ierr);
39a4af0ceeSJacob Faibussowitsch   ierr = PetscDeviceContextGetSOLVERHandle_Internal(dctx,handle);CHKERRQ(ierr);
40a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
41a4af0ceeSJacob Faibussowitsch }
42