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