Reduce complexity of ssd_multibox example
[tidl/tidl-api.git] / tinn_api / inc / executor.h
index 118794d857c932a9753fff00b7cefad086fce124..05e9cc04923a7d749dc201944de856c884baa241 100644 (file)
@@ -38,8 +38,9 @@
 #include <exception>
 
 #include "configuration.h"
 #include <exception>
 
 #include "configuration.h"
+#include "custom.h"
 
 
-namespace tidl {
+namespace tinn {
 
 //! Enumerates types of devices available to offload the network.
 enum class DeviceType { DSP, /**< Offload to C66x DSP */
 
 //! Enumerates types of devices available to offload the network.
 enum class DeviceType { DSP, /**< Offload to C66x DSP */
@@ -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
@@ -99,7 +102,7 @@ class Executor
         //! available for TI DL.
         //! @param  device_type DSP or EVE/DLA device
         //! @return number of devices available
         //! available for TI DL.
         //! @param  device_type DSP or EVE/DLA device
         //! @return number of devices available
-        static uint32_t GetNumDevicesSupportingTIDL(DeviceType device_type);
+        static uint32_t GetNumDevices(DeviceType device_type);
 
         //! @brief Returns a string corresponding to the API version
         //!
 
         //! @brief Returns a string corresponding to the API version
         //!
@@ -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
@@ -143,15 +157,19 @@ class ArgInfo
         //! @return The size of the buffer or scalar represented by ArgInfo
         size_t size() const { return size_m; }
 
         //! @return The size of the buffer or scalar represented by ArgInfo
         size_t size() const { return size_m; }
 
-        // Only used by tidl::Device
+        // Only used by tinn::Device
         Kind   kind() const { return kind_m; }
         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;
 };
 
 
 };
 
 
@@ -203,4 +221,4 @@ class Exception : public std::exception
         std::string message_m;
 };
 
         std::string message_m;
 };
 
-} // namespace tidl
+} // namespace tinn