From 95619fab83506d93f4b5bca9c747da7939bc0d27 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=B0=95=EC=A2=85=ED=98=84/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Staff=20Engineer/=EC=82=BC=EC=84=B1?= =?utf8?q?=EC=A0=84=EC=9E=90?= Date: Fri, 21 Sep 2018 10:30:13 +0900 Subject: [PATCH] [coco] Unique ID for each FeatureLayout (#1613) This commit introduces unique ID value for each FeatureLayout, which allows backend to easily distinguish each layout. Signed-off-by: Jonghyun Park --- contrib/coco/core/include/coco/IR/FeatureLayout.h | 7 +++++++ contrib/coco/core/include/coco/IR/FeatureLayouts.h | 6 ++++++ .../coco/core/include/coco/IR/GenericFeatureLayout.h | 3 +++ contrib/coco/core/src/IR/FeatureLayouts.cpp | 18 ++++++++++++++++++ contrib/coco/core/src/IR/GenericFeatureLayout.cpp | 9 +++++++++ 5 files changed, 43 insertions(+) diff --git a/contrib/coco/core/include/coco/IR/FeatureLayout.h b/contrib/coco/core/include/coco/IR/FeatureLayout.h index 5e5b0e1..36f8384 100644 --- a/contrib/coco/core/include/coco/IR/FeatureLayout.h +++ b/contrib/coco/core/include/coco/IR/FeatureLayout.h @@ -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; diff --git a/contrib/coco/core/include/coco/IR/FeatureLayouts.h b/contrib/coco/core/include/coco/IR/FeatureLayouts.h index 8f3392c..b2d2a29 100644 --- a/contrib/coco/core/include/coco/IR/FeatureLayouts.h +++ b/contrib/coco/core/include/coco/IR/FeatureLayouts.h @@ -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; } diff --git a/contrib/coco/core/include/coco/IR/GenericFeatureLayout.h b/contrib/coco/core/include/coco/IR/GenericFeatureLayout.h index 29179f1..8b6c55d 100644 --- a/contrib/coco/core/include/coco/IR/GenericFeatureLayout.h +++ b/contrib/coco/core/include/coco/IR/GenericFeatureLayout.h @@ -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; } diff --git a/contrib/coco/core/src/IR/FeatureLayouts.cpp b/contrib/coco/core/src/IR/FeatureLayouts.cpp index d3522f7..743b04f 100644 --- a/contrib/coco/core/src/IR/FeatureLayouts.cpp +++ b/contrib/coco/core/src/IR/FeatureLayouts.cpp @@ -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; diff --git a/contrib/coco/core/src/IR/GenericFeatureLayout.cpp b/contrib/coco/core/src/IR/GenericFeatureLayout.cpp index 4de5a2e..056600f 100644 --- a/contrib/coco/core/src/IR/GenericFeatureLayout.cpp +++ b/contrib/coco/core/src/IR/GenericFeatureLayout.cpp @@ -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{}; -- 2.7.4