xref: /petsc/src/sys/objects/device/impls/cupm/cuda/cupmcontext.cu (revision 9371c9d470a9602b6d10a8bf50c9b2280a79e45a)
1030f984aSJacob Faibussowitsch #include "../cupmcontext.hpp" /*I "petscdevice.h" I*/
2030f984aSJacob Faibussowitsch 
317f48955SJacob Faibussowitsch using namespace Petsc::Device::CUPM;
417f48955SJacob Faibussowitsch 
5*9371c9d4SSatish Balay PetscErrorCode PetscDeviceContextCreate_CUDA(PetscDeviceContext dctx) {
617f48955SJacob Faibussowitsch   static constexpr auto contextCuda = CUPMContextCuda();
7030f984aSJacob Faibussowitsch   PetscDeviceContext_(CUDA) * dci;
8030f984aSJacob Faibussowitsch 
9030f984aSJacob Faibussowitsch   PetscFunctionBegin;
107a101e5eSJacob Faibussowitsch   PetscCall(contextCuda.initialize());
119566063dSJacob Faibussowitsch   PetscCall(PetscNew(&dci));
12a4af0ceeSJacob Faibussowitsch   dctx->data = static_cast<decltype(dctx->data)>(dci);
139566063dSJacob 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 */
18*9371c9d4SSatish Balay PetscErrorCode PetscCUBLASGetHandle(cublasHandle_t *handle) {
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));
25a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
26a4af0ceeSJacob Faibussowitsch }
27a4af0ceeSJacob Faibussowitsch 
28*9371c9d4SSatish Balay PetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle) {
29a4af0ceeSJacob Faibussowitsch   PetscDeviceContext dctx;
30a4af0ceeSJacob Faibussowitsch 
31a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
32a4af0ceeSJacob Faibussowitsch   PetscValidPointer(handle, 1);
339566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_CUDA));
349566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextGetSOLVERHandle_Internal(dctx, handle));
35a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
36a4af0ceeSJacob Faibussowitsch }
37