1 #include "../cupmcontext.hpp" /*I "petscdevice.h" I*/ 2 3 PetscErrorCode PetscDeviceContextCreate_CUDA(PetscDeviceContext dctx) 4 { 5 static const Petsc::CUPMContextCuda contextCuda; 6 PetscDeviceContext_(CUDA) *dci; 7 PetscErrorCode ierr; 8 9 PetscFunctionBegin; 10 ierr = PetscNew(&dci);CHKERRQ(ierr); 11 dctx->data = static_cast<decltype(dctx->data)>(dci); 12 ierr = PetscMemcpy(dctx->ops,&contextCuda.ops,sizeof(contextCuda.ops));CHKERRQ(ierr); 13 PetscFunctionReturn(0); 14 } 15 16 /* Management of CUBLAS and CUSOLVER handles */ 17 PetscErrorCode PetscCUBLASGetHandle(cublasHandle_t *handle) 18 { 19 PetscDeviceContext dctx; 20 PetscErrorCode ierr; 21 22 PetscFunctionBegin; 23 PetscValidPointer(handle,1); 24 ierr = PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx,PETSC_DEVICE_CUDA);CHKERRQ(ierr); 25 ierr = PetscDeviceContextGetBLASHandle_Internal(dctx,handle);CHKERRQ(ierr); 26 PetscFunctionReturn(0); 27 } 28 29 PetscErrorCode PetscCUSOLVERDnGetHandle(cusolverDnHandle_t *handle) 30 { 31 PetscDeviceContext dctx; 32 PetscErrorCode ierr; 33 34 PetscFunctionBegin; 35 PetscValidPointer(handle,1); 36 ierr = PetscDeviceContextGetCurrentContextAssertType_Internal(&dctx,PETSC_DEVICE_CUDA);CHKERRQ(ierr); 37 ierr = PetscDeviceContextGetSOLVERHandle_Internal(dctx,handle);CHKERRQ(ierr); 38 PetscFunctionReturn(0); 39 } 40