Reduce complexity of ssd_multibox example
[tidl/tidl-api.git] / tinn_api / inc / executor.h
index e2ce077280f1c26ea1e260972923bebd9edf6a2c..05e9cc04923a7d749dc201944de856c884baa241 100644 (file)
@@ -38,6 +38,7 @@
 #include <exception>
 
 #include "configuration.h"
 #include <exception>
 
 #include "configuration.h"
+#include "custom.h"
 
 namespace tinn {
 
 
 namespace tinn {
 
@@ -84,8 +85,10 @@ class Executor
         //! @param device_type DSP or EVE/DLA device
         //! @param ids Set of devices uses by this instance of the Executor
         //! @param configuration Configuration used to initialize the Executor
         //! @param device_type DSP or EVE/DLA device
         //! @param ids Set of devices uses by this instance of the Executor
         //! @param configuration Configuration used to initialize the Executor
+        //! @param layers_group_id Layers group that this Executor should run
         Executor(DeviceType device_type, const DeviceIds& ids,
         Executor(DeviceType device_type, const DeviceIds& ids,
-                 const Configuration& configuration);
+                 const Configuration& configuration,
+                 int layers_group_id = OCL_TIDL_DEFAULT_LAYERS_GROUP_ID);
 
         //! @brief Tear down an Executor and free resources used by the
         //! Executor object
 
         //! @brief Tear down an Executor and free resources used by the
         //! Executor object
@@ -114,6 +117,16 @@ class Executor
         std::unique_ptr<ExecutorImpl> pimpl_m;
 };
 
         std::unique_ptr<ExecutorImpl> pimpl_m;
 };
 
+/*! @class PipeInfo
+ *  @brief Describe input and output required by piping output and input
+ *         between Execution Objects
+ */
+class PipeInfo
+{
+    public:
+        uint32_t dataQ_m[OCL_TIDL_MAX_IN_BUFS];
+        uint32_t bufAddr_m[OCL_TIDL_MAX_IN_BUFS];
+};
 
 /*! @class ArgInfo
  *  @brief Describe input and output buffers required by ExecutionObjects
 
 /*! @class ArgInfo
  *  @brief Describe input and output buffers required by ExecutionObjects
@@ -130,7 +143,8 @@ class ArgInfo
         //! and its size.
         ArgInfo(void *p, size_t size) :
             ptr_m(p), size_m(size),
         //! and its size.
         ArgInfo(void *p, size_t size) :
             ptr_m(p), size_m(size),
-            access_m(DeviceAccess::RW), kind_m(Kind::BUFFER) {}
+            access_m(DeviceAccess::RW), kind_m(Kind::BUFFER)
+        { pipe_m = std::make_shared<PipeInfo>(); }
 
         //! Construct an ArgInfo object from a pointer to a chunk of memory
         //! its size and kind
 
         //! Construct an ArgInfo object from a pointer to a chunk of memory
         //! its size and kind
@@ -145,13 +159,17 @@ class ArgInfo
 
         // Only used by tinn::Device
         Kind   kind() const { return kind_m; }
 
         // Only used by tinn::Device
         Kind   kind() const { return kind_m; }
-        bool   isLocal() const { return (ptr_m == nullptr); }
+        bool   isLocal() const { return (ptr_m == nullptr) && (size_m > 0); }
+
+        // Only used by tinn::ExecutionObject::Impl
+        PipeInfo *GetPipe() const { return pipe_m.get(); }
 
     private:
         void*        ptr_m;
         size_t       size_m;
         DeviceAccess access_m;
         Kind         kind_m;
 
     private:
         void*        ptr_m;
         size_t       size_m;
         DeviceAccess access_m;
         Kind         kind_m;
+        std::shared_ptr<PipeInfo> pipe_m;
 };
 
 
 };