summaryrefslogtreecommitdiff
path: root/python/openvino/runtime/coredla_device/inc/stream_controller_comms.h
diff options
context:
space:
mode:
authorEric Dao <eric@erickhangdao.com>2025-03-10 17:54:31 -0400
committerEric Dao <eric@erickhangdao.com>2025-03-10 17:54:31 -0400
commitab224e2e6ba65f5a369ec392f99cd8845ad06c98 (patch)
treea1e757e9341863ed52b8ad4c5a1c45933aab9da4 /python/openvino/runtime/coredla_device/inc/stream_controller_comms.h
parent40da1752f2c8639186b72f6838aa415e854d0b1d (diff)
downloadthesis-master.tar.gz
thesis-master.tar.bz2
thesis-master.zip
completed thesisHEADmaster
Diffstat (limited to 'python/openvino/runtime/coredla_device/inc/stream_controller_comms.h')
-rw-r--r--python/openvino/runtime/coredla_device/inc/stream_controller_comms.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/python/openvino/runtime/coredla_device/inc/stream_controller_comms.h b/python/openvino/runtime/coredla_device/inc/stream_controller_comms.h
new file mode 100644
index 0000000..e2fcdfc
--- /dev/null
+++ b/python/openvino/runtime/coredla_device/inc/stream_controller_comms.h
@@ -0,0 +1,69 @@
+// Copyright 2023 Intel Corporation.
+//
+// This software and the related documents are Intel copyrighted materials,
+// and your use of them is governed by the express license under which they
+// were provided to you ("License"). Unless the License provides otherwise,
+// you may not use, modify, copy, publish, distribute, disclose or transmit
+// this software or the related documents without Intel's prior written
+// permission.
+//
+// This software and the related documents are provided as is, with no express
+// or implied warranties, other than those that are expressly stated in the
+// License.
+
+#pragma once
+#include <mutex>
+#include <string>
+#include <vector>
+#include "mmd_wrapper.h"
+#include "stream_controller_messages.h"
+
+template <class T>
+struct Payload : public T {
+ void* GetPayload() { return this; }
+ size_t GetSize() { return sizeof(*this); }
+};
+
+class BusyFlag {
+ public:
+ bool Lock();
+ void Release();
+
+ private:
+ std::recursive_mutex _mutex;
+ bool _busy = false;
+};
+
+class BusyCheck {
+ public:
+ BusyCheck(BusyFlag& busyFlag);
+ ~BusyCheck();
+ operator bool();
+
+ private:
+ BusyFlag& _busyFlag;
+ bool _haveLocked;
+};
+
+class StreamControllerComms {
+ public:
+ StreamControllerComms();
+ bool IsPresent();
+ Payload<StatusMessagePayload> GetStatus();
+ std::string GetStatusString(Payload<StatusMessagePayload>& statusPayload);
+ bool ScheduleItems(std::vector<Payload<CoreDlaJobPayload>> items);
+ bool Ping();
+ bool Initialize(uint32_t sourceBufferSize, uint32_t dropSourceBuffers, uint32_t numInferenceRequests);
+
+ private:
+ bool StatusMessageHandler(uint32_t payloadOffset);
+ MessageType ReceiveMessage();
+ bool SendMessage(MessageType, void* pPayload = nullptr, size_t size = 0);
+ MmdWrapper _mmdWrapper;
+ uint32_t _lastReceiveSequenceID = 0;
+ uint32_t _sendSequenceID = 0;
+ uint32_t _numBadMessages = 0;
+ const int _streamControllerInstance = 0;
+ Payload<StatusMessagePayload> _receivedStatusMessage;
+ BusyFlag _busyFlag;
+};