index e78ad2e98f0ec8ffd4305536bca46c368dbb4f3b..c1d86fc126bb8e243a67df04d30bfb5c3aca63d8 100644 (file)
#pragma once
#include <memory>
#pragma once
#include <memory>
+#include "execution_object_internal.h"
namespace tidl {
namespace tidl {
class LayerOutput;
class IODeviceArgInfo;
class LayerOutput;
class IODeviceArgInfo;
-typedef std::vector<std::unique_ptr<const LayerOutput>> LayerOutputs;
/*! @class ExecutionObject
@brief Runs the TIDL network on an OpenCL device
*/
/*! @class ExecutionObject
@brief Runs the TIDL network on an OpenCL device
*/
-class ExecutionObject
+class ExecutionObject : public ExecutionObjectInternalInterface
{
public:
{
public:
const ArgInfo& create_arg,
const ArgInfo& param_heap_arg,
size_t extmem_heap_size,
const ArgInfo& create_arg,
const ArgInfo& param_heap_arg,
size_t extmem_heap_size,
+ int layersGroupId,
+ bool output_trace,
bool internal_input);
//! @private
~ExecutionObject();
bool internal_input);
//! @private
~ExecutionObject();
//! Specify the input and output buffers used by the EO
//! @param in buffer used for input.
//! @param out buffer used for output.
//! Specify the input and output buffers used by the EO
//! @param in buffer used for input.
//! @param out buffer used for output.
- void SetInputOutputBuffer (const ArgInfo& in, const ArgInfo& out);
+ void SetInputOutputBuffer(const ArgInfo& in,
+ const ArgInfo& out) override;
//! Returns a pointer to the input buffer set via SetInputOutputBuffer
//! Returns a pointer to the input buffer set via SetInputOutputBuffer
- char* GetInputBufferPtr() const;
+ char* GetInputBufferPtr() const override;
//! Returns size of the input buffer
//! Returns size of the input buffer
- size_t GetInputBufferSizeInBytes() const;
+ size_t GetInputBufferSizeInBytes() const override;
+
+ //! Returns a pointer to the output buffer
+ char* GetOutputBufferPtr() const override;
+
+ //! Returns size of the output buffer
+ size_t GetOutputBufferSizeInBytes() const override;
//! @brief Set the frame index of the frame currently processed by the
//! ExecutionObject. Used for trace/debug messages
//! @param idx index of the frame
//! @brief Set the frame index of the frame currently processed by the
//! ExecutionObject. Used for trace/debug messages
//! @param idx index of the frame
- void SetFrameIndex(int idx);
+ void SetFrameIndex(int idx) override;
//! Returns the index of a frame being processed (set by SetFrameIndex)
//! Returns the index of a frame being processed (set by SetFrameIndex)
- int GetFrameIndex() const;
-
- //! Returns a pointer to the output buffer
- char* GetOutputBufferPtr() const;
-
- //! Returns the number of bytes written to the output buffer
- size_t GetOutputBufferSizeInBytes() const;
+ int GetFrameIndex() const override;
- //! @brief Start processing a frame. The call is asynchronous and returns
- //! immediately. Use ExecutionObject::ProcessFrameWait to wait
- bool ProcessFrameStartAsync();
+ //! @brief Start processing a frame. The call is asynchronous and
+ //! returns immediately. Use ExecutionObject::ProcessFrameWait to wait
+ bool ProcessFrameStartAsync() override;
//! Wait for the execution object to complete processing a frame
//! @return false if ExecutionObject::ProcessFrameWait was called
//! without a corresponding call to
//! ExecutionObject::ProcessFrameStartAsync.
//! Wait for the execution object to complete processing a frame
//! @return false if ExecutionObject::ProcessFrameWait was called
//! without a corresponding call to
//! ExecutionObject::ProcessFrameStartAsync.
- bool ProcessFrameWait();
-
- //! @brief return the number of cycles taken *on the device* to
- //! execute the process call
- //! @return Number of cycles to process a frame on the device.
- uint64_t GetProcessCycles() const;
+ bool ProcessFrameWait() override;
//! @brief return the number of milliseconds taken *on the device* to
//! execute the process call
//! @return Number of milliseconds to process a frame on the device.
//! @brief return the number of milliseconds taken *on the device* to
//! execute the process call
//! @return Number of milliseconds to process a frame on the device.
- float GetProcessTimeInMilliSeconds() const;
+ float GetProcessTimeInMilliSeconds() const override;
+
+ //! @brief return the number of milliseconds taken *on the host* to
+ //! execute the process call
+ //! @return Number of milliseconds to process a frame on the host.
+ float GetHostProcessTimeInMilliSeconds() const override;
+
+ //! Returns the device name that the ExecutionObject runs on
+ const std::string& GetDeviceName() const override;
//! Write the output buffer for each layer to a file
//! Write the output buffer for each layer to a file
- //! <filename_prefix>_<ID>_HxW.bin
+ //! \<filename_prefix>_<ID>_HxW.bin
void WriteLayerOutputsToFile(const std::string& filename_prefix=
void WriteLayerOutputsToFile(const std::string& filename_prefix=
- "trace_dump_") const;
+ "trace_dump_") const override;
//! Returns a LayerOutput object corresponding to a layer.
//! Caller is responsible for deleting the LayerOutput object.
//! Returns a LayerOutput object corresponding to a layer.
//! Caller is responsible for deleting the LayerOutput object.
//! @param output_index The output index of the buffer for a given
//! layer. Defaults to 0.
const LayerOutput* GetOutputFromLayer(uint32_t layer_index,
//! @param output_index The output index of the buffer for a given
//! layer. Defaults to 0.
const LayerOutput* GetOutputFromLayer(uint32_t layer_index,
- uint32_t output_index=0) const;
+ uint32_t output_index=0) const override;
//! Get output buffers from all layers
//! Get output buffers from all layers
- const LayerOutputs* GetOutputsFromAllLayers() const;
+ const LayerOutputs* GetOutputsFromAllLayers() const override;
+
+ //! Returns the layersGrupId that the ExecutionObject is processing
+ int GetLayersGroupId() const;
//! @private
// Used by the Executor
//! @private
// Used by the Executor
bool RunAsync(CallType ct);
bool Wait (CallType ct);
bool RunAsync(CallType ct);
bool Wait (CallType ct);
+ //! @private
+ // Used by the ExecutionObjectPipeline
+ bool AddCallback(CallType ct, void *user_data);
+ void AcquireLock();
+ void ReleaseLock();
+
ExecutionObject() = delete;
ExecutionObject(const ExecutionObject&) = delete;
ExecutionObject& operator=(const ExecutionObject&) = delete;
ExecutionObject() = delete;
ExecutionObject(const ExecutionObject&) = delete;
ExecutionObject& operator=(const ExecutionObject&) = delete;
- void EnableOutputBufferTrace();
-
//! @private
void SetInputOutputBuffer(const IODeviceArgInfo* in,
const IODeviceArgInfo* out);
//! @private
void SetInputOutputBuffer(const IODeviceArgInfo* in,
const IODeviceArgInfo* out);