[coco] Unique ID for each FeatureLayout (#1613)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Fri, 21 Sep 2018 01:30:13 +0000 (10:30 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Fri, 21 Sep 2018 01:30:13 +0000 (10:30 +0900)
This commit introduces unique ID value for each FeatureLayout, which
allows backend to easily distinguish each layout.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/coco/core/include/coco/IR/FeatureLayout.h
contrib/coco/core/include/coco/IR/FeatureLayouts.h
contrib/coco/core/include/coco/IR/GenericFeatureLayout.h
contrib/coco/core/src/IR/FeatureLayouts.cpp
contrib/coco/core/src/IR/GenericFeatureLayout.cpp

index 5e5b0e1..36f8384 100644 (file)
@@ -15,8 +15,15 @@ namespace coco
  */
 struct FeatureLayout
 {
+  struct ID
+  {
+    virtual ~ID() = default;
+  };
+
   virtual ~FeatureLayout() = default;
 
+  virtual const ID *id(void) const = 0;
+
   virtual uint32_t batch(void) const = 0;
   virtual const nncc::core::ADT::feature::Shape &shape(void) const = 0;
 
index 8f3392c..b2d2a29 100644 (file)
@@ -22,6 +22,9 @@ private:
   }
 
 public:
+  static const FeatureLayout::ID *uid(void);
+  const FeatureLayout::ID *id(void) const override { return uid(); }
+
   uint32_t batch(void) const override { return _batch; }
   const nncc::core::ADT::feature::Shape &shape(void) const override { return _shape; }
 
@@ -47,6 +50,9 @@ private:
   }
 
 public:
+  static const FeatureLayout::ID *uid(void);
+  const FeatureLayout::ID *id(void) const override { return uid(); }
+
   uint32_t batch(void) const override { return _batch; }
   const nncc::core::ADT::feature::Shape &shape(void) const override { return _shape; }
 
index 29179f1..8b6c55d 100644 (file)
@@ -16,6 +16,9 @@ public:
   GenericFeatureLayout(const nncc::core::ADT::feature::Shape &shape);
 
 public:
+  static const FeatureLayout::ID *uid(void);
+  const FeatureLayout::ID *id(void) const override { return uid(); }
+
   uint32_t batch(void) const override { return _batch; }
   const nncc::core::ADT::feature::Shape &shape(void) const override { return _shape; }
 
index d3522f7..743b04f 100644 (file)
@@ -13,6 +13,15 @@ namespace coco
 namespace FeatureLayouts
 {
 
+const FeatureLayout::ID *BCHW::uid(void)
+{
+  struct LayoutID final : public FeatureLayout::ID
+  {
+  };
+  static LayoutID id;
+  return &id;
+}
+
 ElemID BCHW::at(uint32_t b, uint32_t ch, uint32_t row, uint32_t col) const
 {
   static CHWLayout l;
@@ -40,6 +49,15 @@ namespace coco
 namespace FeatureLayouts
 {
 
+const FeatureLayout::ID *BHWC::uid(void)
+{
+  struct LayoutID final : public FeatureLayout::ID
+  {
+  };
+  static LayoutID id;
+  return &id;
+}
+
 ElemID BHWC::at(uint32_t b, uint32_t ch, uint32_t row, uint32_t col) const
 {
   static HWCLayout l;
index 4de5a2e..056600f 100644 (file)
@@ -15,6 +15,15 @@ GenericFeatureLayout::GenericFeatureLayout(const nncc::core::ADT::feature::Shape
   _content.resize(_batch * num_elements(_shape));
 }
 
+const FeatureLayout::ID *GenericFeatureLayout::uid(void)
+{
+  struct LayoutID final : public FeatureLayout::ID
+  {
+  };
+  static LayoutID id;
+  return &id;
+}
+
 uint32_t GenericFeatureLayout::offset(uint32_t b, uint32_t ch, uint32_t row, uint32_t col) const
 {
   static nncc::core::ADT::feature::CHWLayout l{};