xref: /petsc/src/sys/objects/device/impls/host/hostcontext.cxx (revision 3ba1676111f5c958fe6c2729b46ca4d523958bb3)
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