xref: /petsc/src/sys/objects/device/impls/cupm/cuda/cupmcontext.cu (revision 0e6b6b5985dd9b1172860d21fb88bd3966bf7c54)
1030f984aSJacob Faibussowitsch #include "../cupmcontext.hpp" /*I "petscdevice.h" I*/
2030f984aSJacob Faibussowitsch 
3*0e6b6b59SJacob Faibussowitsch using namespace Petsc::device::cupm;
417f48955SJacob Faibussowitsch 
59371c9d4SSatish Balay PetscErrorCode PetscDeviceContextCreate_CUDA(PetscDeviceContext dctx) {
6*0e6b6b59SJacob Faibussowitsch   static constexpr auto cuda_context = CUPMContextCuda();
7030f984aSJacob Faibussowitsch 
8030f984aSJacob Faibussowitsch   PetscFunctionBegin;
9*0e6b6b59SJacob Faibussowitsch   PetscCall(cuda_context.initialize());
10*0e6b6b59SJacob Faibussowitsch   dctx->data = new PetscDeviceContext_(CUDA);
11*0e6b6b59SJacob Faibussowitsch   PetscCall(PetscMemcpy(dctx->ops, &cuda_context.ops, sizeof(cuda_context.ops)));
12030f984aSJacob Faibussowitsch   PetscFunctionReturn(0);
13030f984aSJacob Faibussowitsch }
14a4af0ceeSJacob Faibussowitsch 
15a4af0ceeSJacob Faibussowitsch /* Management of CUBLAS and CUSOLVER handles */
169371c9d4SSatish Balay PetscErrorCode PetscCUBLASGetHandle(cublasHandle_t *handle) {
17a4af0ceeSJacob Faibussowitsch   PetscDeviceContext dctx;
18a4af0ceeSJacob Faibussowitsch 
19a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
20a4af0ceeSJacob Faibussowitsch   PetscValidPointer(handle, 1);
219566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_CUDA));
229566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextGetBLASHandle_Internal(dctx, handle));
23a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
24a4af0ceeSJacob Faibussowitsch }
25a4af0ceeSJacob Faibussowitsch 
269371c9d4SSatish Balay PetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle) {
27a4af0ceeSJacob Faibussowitsch   PetscDeviceContext dctx;
28a4af0ceeSJacob Faibussowitsch 
29a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
30a4af0ceeSJacob Faibussowitsch   PetscValidPointer(handle, 1);
319566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx, PETSC_DEVICE_CUDA));
329566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextGetSOLVERHandle_Internal(dctx, handle));
33a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
34a4af0ceeSJacob Faibussowitsch }
35