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