1 #include <petsc/private/deviceimpl.h> 2 3 #include <petsc/private/cpp/macros.hpp> 4 #include <petsc/private/cpp/utility.hpp> 5 6 namespace Petsc 7 { 8 9 namespace device 10 { 11 12 namespace host 13 { 14 15 namespace impl 16 { 17 18 class DeviceContext { 19 public: 20 PETSC_CXX_COMPAT_DECL(PetscErrorCode destroy(PetscDeviceContext)) { return 0; } 21 PETSC_CXX_COMPAT_DECL(PetscErrorCode changeStreamType(PetscDeviceContext, PetscStreamType)) { return 0; } 22 PETSC_CXX_COMPAT_DECL(PetscErrorCode setUp(PetscDeviceContext)) { return 0; } 23 PETSC_CXX_COMPAT_DECL(PetscErrorCode query(PetscDeviceContext, PetscBool *idle)) 24 { 25 PetscFunctionBegin; 26 *idle = PETSC_TRUE; // the host is always idle 27 PetscFunctionReturn(0); 28 } 29 PETSC_CXX_COMPAT_DECL(PetscErrorCode waitForContext(PetscDeviceContext, PetscDeviceContext)) { return 0; } 30 PETSC_CXX_COMPAT_DECL(PetscErrorCode synchronize(PetscDeviceContext)) { return 0; } 31 PETSC_CXX_COMPAT_DECL(PetscErrorCode getBlasHandle(PetscDeviceContext, void *)) { SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Not implemented"); } 32 PETSC_CXX_COMPAT_DECL(PetscErrorCode getSolverHandle(PetscDeviceContext, void *)) { SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Not implemented"); } 33 PETSC_CXX_COMPAT_DECL(PetscErrorCode getStreamHandle(PetscDeviceContext, void *)) { SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Not implemented"); } 34 PETSC_CXX_COMPAT_DECL(PetscErrorCode beginTimer(PetscDeviceContext)) { SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Not implemented"); } 35 PETSC_CXX_COMPAT_DECL(PetscErrorCode endTimer(PetscDeviceContext, PetscLogDouble *)) { SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Not implemented"); } 36 37 const _DeviceContextOps ops = {destroy, changeStreamType, setUp, query, waitForContext, synchronize, getBlasHandle, getSolverHandle, getStreamHandle, beginTimer, endTimer, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr}; 38 }; 39 40 } // namespace impl 41 42 } // namespace host 43 44 } // namespace device 45 46 } // namespace Petsc 47 48 PetscErrorCode PetscDeviceContextCreate_HOST(PetscDeviceContext dctx) 49 { 50 static constexpr auto hostctx = ::Petsc::device::host::impl::DeviceContext{}; 51 52 PetscFunctionBegin; 53 PetscAssert(!dctx->data, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "PetscDeviceContext %" PetscInt64_FMT " is of type host, but still has data member %p", PetscObjectCast(dctx)->id, dctx->data); 54 PetscCall(PetscArraycpy(dctx->ops, &hostctx.ops, 1)); 55 PetscFunctionReturn(0); 56 } 57