10e6b6b59SJacob Faibussowitsch #include <petsc/private/deviceimpl.h> 20e6b6b59SJacob Faibussowitsch 30e6b6b59SJacob Faibussowitsch #include <petsc/private/cpp/macros.hpp> 40e6b6b59SJacob Faibussowitsch #include <petsc/private/cpp/utility.hpp> 50e6b6b59SJacob Faibussowitsch 6d71ae5a4SJacob Faibussowitsch namespace Petsc 7d71ae5a4SJacob Faibussowitsch { 80e6b6b59SJacob Faibussowitsch 9d71ae5a4SJacob Faibussowitsch namespace device 10d71ae5a4SJacob Faibussowitsch { 110e6b6b59SJacob Faibussowitsch 12d71ae5a4SJacob Faibussowitsch namespace host 13d71ae5a4SJacob Faibussowitsch { 140e6b6b59SJacob Faibussowitsch 15d71ae5a4SJacob Faibussowitsch namespace impl 16d71ae5a4SJacob Faibussowitsch { 170e6b6b59SJacob Faibussowitsch 180e6b6b59SJacob Faibussowitsch class DeviceContext { 190e6b6b59SJacob Faibussowitsch public: 20*3ba16761SJacob Faibussowitsch PETSC_CXX_COMPAT_DECL(PetscErrorCode destroy(PetscDeviceContext)) { return PETSC_SUCCESS; } 21*3ba16761SJacob Faibussowitsch PETSC_CXX_COMPAT_DECL(PetscErrorCode changeStreamType(PetscDeviceContext, PetscStreamType)) { return PETSC_SUCCESS; } 22*3ba16761SJacob Faibussowitsch PETSC_CXX_COMPAT_DECL(PetscErrorCode setUp(PetscDeviceContext)) { return PETSC_SUCCESS; } 23d71ae5a4SJacob Faibussowitsch PETSC_CXX_COMPAT_DECL(PetscErrorCode query(PetscDeviceContext, PetscBool *idle)) 24d71ae5a4SJacob Faibussowitsch { 250e6b6b59SJacob Faibussowitsch PetscFunctionBegin; 260e6b6b59SJacob Faibussowitsch *idle = PETSC_TRUE; // the host is always idle 27*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 280e6b6b59SJacob Faibussowitsch } 29*3ba16761SJacob Faibussowitsch PETSC_CXX_COMPAT_DECL(PetscErrorCode waitForContext(PetscDeviceContext, PetscDeviceContext)) { return PETSC_SUCCESS; } 30*3ba16761SJacob Faibussowitsch PETSC_CXX_COMPAT_DECL(PetscErrorCode synchronize(PetscDeviceContext)) { return PETSC_SUCCESS; } 310e6b6b59SJacob Faibussowitsch PETSC_CXX_COMPAT_DECL(PetscErrorCode getBlasHandle(PetscDeviceContext, void *)) { SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Not implemented"); } 320e6b6b59SJacob Faibussowitsch PETSC_CXX_COMPAT_DECL(PetscErrorCode getSolverHandle(PetscDeviceContext, void *)) { SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Not implemented"); } 330e6b6b59SJacob Faibussowitsch PETSC_CXX_COMPAT_DECL(PetscErrorCode getStreamHandle(PetscDeviceContext, void *)) { SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Not implemented"); } 340e6b6b59SJacob Faibussowitsch PETSC_CXX_COMPAT_DECL(PetscErrorCode beginTimer(PetscDeviceContext)) { SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Not implemented"); } 350e6b6b59SJacob Faibussowitsch PETSC_CXX_COMPAT_DECL(PetscErrorCode endTimer(PetscDeviceContext, PetscLogDouble *)) { SETERRQ(PETSC_COMM_SELF, PETSC_ERR_SUP, "Not implemented"); } 360e6b6b59SJacob Faibussowitsch 373f675fcfSPierre Jolivet const _DeviceContextOps ops = {destroy, changeStreamType, setUp, query, waitForContext, synchronize, getBlasHandle, getSolverHandle, getStreamHandle, beginTimer, endTimer, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr}; 380e6b6b59SJacob Faibussowitsch }; 390e6b6b59SJacob Faibussowitsch 400e6b6b59SJacob Faibussowitsch } // namespace impl 410e6b6b59SJacob Faibussowitsch 420e6b6b59SJacob Faibussowitsch } // namespace host 430e6b6b59SJacob Faibussowitsch 440e6b6b59SJacob Faibussowitsch } // namespace device 450e6b6b59SJacob Faibussowitsch 460e6b6b59SJacob Faibussowitsch } // namespace Petsc 470e6b6b59SJacob Faibussowitsch 48d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDeviceContextCreate_HOST(PetscDeviceContext dctx) 49d71ae5a4SJacob Faibussowitsch { 500e6b6b59SJacob Faibussowitsch static constexpr auto hostctx = ::Petsc::device::host::impl::DeviceContext{}; 510e6b6b59SJacob Faibussowitsch 520e6b6b59SJacob Faibussowitsch PetscFunctionBegin; 530e6b6b59SJacob Faibussowitsch 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); 540e6b6b59SJacob Faibussowitsch PetscCall(PetscArraycpy(dctx->ops, &hostctx.ops, 1)); 55*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 560e6b6b59SJacob Faibussowitsch } 57