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