From de9235baabda093dac6bb751baf7ba90405ab7e3 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: Mon, 17 Sep 2018 16:38:44 +0900 Subject: [PATCH] [coco] Do NOT use Op-to-Instr link (#1525) coco no longer uses Op-to-Instr link as a mean to manage Op-to-Instr relations. This commit removes all the use of Op-to-Instr link in coco IR codebase. Signed-off-by: Jonghyun Park --- contrib/coco/core/include/coco/IR/AvgPool2D.h | 8 +------- contrib/coco/core/include/coco/IR/Conv2D.h | 8 +------- contrib/coco/core/include/coco/IR/InstrManager.h | 4 +--- contrib/coco/core/include/coco/IR/MaxPool2D.h | 8 +------- contrib/coco/core/include/coco/IR/Op.h | 3 --- contrib/coco/core/include/coco/IR/OpManager.h | 3 +-- contrib/coco/core/include/coco/IR/PadF.h | 8 +------- contrib/coco/core/include/coco/IR/ReLU.h | 8 +------- contrib/coco/core/include/coco/IR/UnitF.h | 10 +--------- contrib/coco/core/src/IR/AvgPool2D.cpp | 2 +- contrib/coco/core/src/IR/AvgPool2D.test.cpp | 5 +---- contrib/coco/core/src/IR/Conv2D.cpp | 3 +-- contrib/coco/core/src/IR/Conv2D.test.cpp | 3 +-- contrib/coco/core/src/IR/Instr.test.cpp | 8 ++------ contrib/coco/core/src/IR/InstrManager.cpp | 2 +- contrib/coco/core/src/IR/InstrManager.test.cpp | 6 ++---- contrib/coco/core/src/IR/MaxPool2D.cpp | 2 +- contrib/coco/core/src/IR/MaxPool2D.test.cpp | 5 +---- contrib/coco/core/src/IR/Module.cpp | 7 ++----- contrib/coco/core/src/IR/OpManager.cpp | 22 ++++++---------------- contrib/coco/core/src/IR/OpManager.test.cpp | 9 +++------ contrib/coco/core/src/IR/PadF.cpp | 2 +- contrib/coco/core/src/IR/PadF.test.cpp | 5 +---- contrib/coco/core/src/IR/ReLU.cpp | 2 +- contrib/coco/core/src/IR/ReLU.test.cpp | 5 +---- contrib/coco/core/src/IR/UnitF.cpp | 23 +---------------------- 26 files changed, 35 insertions(+), 136 deletions(-) diff --git a/contrib/coco/core/include/coco/IR/AvgPool2D.h b/contrib/coco/core/include/coco/IR/AvgPool2D.h index 7d0192b..54af9d2 100644 --- a/contrib/coco/core/include/coco/IR/AvgPool2D.h +++ b/contrib/coco/core/include/coco/IR/AvgPool2D.h @@ -25,7 +25,7 @@ public: }; public: - explicit AvgPool2D(const PtrLink *); + explicit AvgPool2D(); public: AvgPool2D(const AvgPool2D &) = delete; @@ -58,12 +58,6 @@ public: const Stride2D *stride(void) const { return &_stride; } private: - void get(const PtrLink **out) const override { *out = _op_link; } - -private: - const PtrLink *const _op_link; - -private: Divisor _divisor = Divisor::Unknown; Window2D _window; diff --git a/contrib/coco/core/include/coco/IR/Conv2D.h b/contrib/coco/core/include/coco/IR/Conv2D.h index d95f0f7..c860039 100644 --- a/contrib/coco/core/include/coco/IR/Conv2D.h +++ b/contrib/coco/core/include/coco/IR/Conv2D.h @@ -19,7 +19,7 @@ namespace coco class Conv2D : public Op, public Object::Consumer { public: - explicit Conv2D(const PtrLink *, const PtrLink *); + explicit Conv2D(const PtrLink *); public: std::set uses(void) const override; @@ -67,12 +67,6 @@ public: const Stride2D *stride(void) const { return &_stride; } private: - const PtrLink *const _op_link; - -private: - void get(const PtrLink **out) const override { *out = _op_link; } - -private: uint32_t _group = 1; Padding2D _pad; diff --git a/contrib/coco/core/include/coco/IR/InstrManager.h b/contrib/coco/core/include/coco/IR/InstrManager.h index 133e4c4..c5b5e1e 100644 --- a/contrib/coco/core/include/coco/IR/InstrManager.h +++ b/contrib/coco/core/include/coco/IR/InstrManager.h @@ -22,8 +22,7 @@ namespace coco class InstrManager final : public PtrManager { public: - InstrManager(PtrLink *op_link, const PtrLink *obj_link) - : _op_link{op_link}, _obj_link{obj_link} + InstrManager(const PtrLink *obj_link) : _obj_link{obj_link} { // DO NOTHING } @@ -40,7 +39,6 @@ public: void destroy(Instr *); private: - PtrLink *const _op_link; const PtrLink *const _obj_link; }; diff --git a/contrib/coco/core/include/coco/IR/MaxPool2D.h b/contrib/coco/core/include/coco/IR/MaxPool2D.h index b555158..579e150 100644 --- a/contrib/coco/core/include/coco/IR/MaxPool2D.h +++ b/contrib/coco/core/include/coco/IR/MaxPool2D.h @@ -15,7 +15,7 @@ namespace coco class MaxPool2D : public Op { public: - explicit MaxPool2D(const PtrLink *); + explicit MaxPool2D(); public: MaxPool2D(const MaxPool2D &) = delete; @@ -44,12 +44,6 @@ public: const Padding2D *pad(void) const { return &_pad; } private: - void get(const PtrLink **out) const override { *out = _op_link; } - -private: - const PtrLink *const _op_link; - -private: Window2D _window; Stride2D _stride; Padding2D _pad; diff --git a/contrib/coco/core/include/coco/IR/Op.h b/contrib/coco/core/include/coco/IR/Op.h index 68677b1..144e576 100644 --- a/contrib/coco/core/include/coco/IR/Op.h +++ b/contrib/coco/core/include/coco/IR/Op.h @@ -74,9 +74,6 @@ struct Op template T accept(Visitor &v) const { return accept(&v); } template T accept(Visitor &&v) const { return accept(&v); } -protected: - virtual void get(const PtrLink **) const = 0; - public: Instr *parent(void) const; diff --git a/contrib/coco/core/include/coco/IR/OpManager.h b/contrib/coco/core/include/coco/IR/OpManager.h index 4dbc40d..de530dd 100644 --- a/contrib/coco/core/include/coco/IR/OpManager.h +++ b/contrib/coco/core/include/coco/IR/OpManager.h @@ -21,7 +21,7 @@ namespace coco struct OpManager : public PtrManager { public: - OpManager(const PtrLink *op_link, const PtrLink *obj_link); + OpManager(const PtrLink *obj_link); public: template T *create(void); @@ -34,7 +34,6 @@ public: void destroy(Op *); private: - const PtrLink *const _op_link; const PtrLink *const _obj_link; }; diff --git a/contrib/coco/core/include/coco/IR/PadF.h b/contrib/coco/core/include/coco/IR/PadF.h index 09f684b..bd233ce 100644 --- a/contrib/coco/core/include/coco/IR/PadF.h +++ b/contrib/coco/core/include/coco/IR/PadF.h @@ -13,7 +13,7 @@ namespace coco class PadF : public Op { public: - explicit PadF(const PtrLink *); + explicit PadF(); public: PadF(const PadF &) = delete; @@ -34,12 +34,6 @@ public: const Padding2D *pad(void) const { return &_pad; } private: - void get(const PtrLink **out) const override { *out = _op_link; } - -private: - const PtrLink *const _op_link; - -private: Padding2D _pad; }; diff --git a/contrib/coco/core/include/coco/IR/ReLU.h b/contrib/coco/core/include/coco/IR/ReLU.h index 5dc3da7..952b465 100644 --- a/contrib/coco/core/include/coco/IR/ReLU.h +++ b/contrib/coco/core/include/coco/IR/ReLU.h @@ -12,7 +12,7 @@ namespace coco class ReLU : public Op { public: - explicit ReLU(const PtrLink *); + explicit ReLU(); public: ReLU(const ReLU &) = delete; @@ -24,12 +24,6 @@ public: public: ReLU *asReLU(void) override { return this; } const ReLU *asReLU(void) const override { return this; } - -private: - void get(const PtrLink **out) const override { *out = _op_link; } - -private: - const PtrLink *const _op_link; }; } // namespace coco diff --git a/contrib/coco/core/include/coco/IR/UnitF.h b/contrib/coco/core/include/coco/IR/UnitF.h index e2a0c38..11be69d 100644 --- a/contrib/coco/core/include/coco/IR/UnitF.h +++ b/contrib/coco/core/include/coco/IR/UnitF.h @@ -17,11 +17,7 @@ class UnitF final : public FeatureInstr { public: // TODO Update constructor - UnitF(PtrLink *op_link, const PtrLink *obj_link) - : FeatureInstr{obj_link}, _op_link{op_link} - { - _step.instr(this); - } + UnitF(const PtrLink *obj_link) : FeatureInstr{obj_link} { _step.instr(this); } public: UnitF *asUnitF(void) override { return this; } @@ -34,10 +30,6 @@ public: public: Instr *loc(void) override { return this; } -private: - // TODO Remove this field - PtrLink *const _op_link; - public: Op *op(void) const { return _step.op(); } diff --git a/contrib/coco/core/src/IR/AvgPool2D.cpp b/contrib/coco/core/src/IR/AvgPool2D.cpp index a4a140e..a2fe65f 100644 --- a/contrib/coco/core/src/IR/AvgPool2D.cpp +++ b/contrib/coco/core/src/IR/AvgPool2D.cpp @@ -3,7 +3,7 @@ namespace coco { -AvgPool2D::AvgPool2D(const PtrLink *op_link) : _op_link{op_link} +AvgPool2D::AvgPool2D() { // DO NOTHING } diff --git a/contrib/coco/core/src/IR/AvgPool2D.test.cpp b/contrib/coco/core/src/IR/AvgPool2D.test.cpp index c4c2b51..73a07df 100644 --- a/contrib/coco/core/src/IR/AvgPool2D.test.cpp +++ b/contrib/coco/core/src/IR/AvgPool2D.test.cpp @@ -23,14 +23,11 @@ public: protected: coco::AvgPool2D *allocate(void) { - auto op = new coco::AvgPool2D{&op_link}; + auto op = new coco::AvgPool2D; _allocated.emplace_back(op); return op; } -protected: - coco::PtrLink op_link; - private: std::vector> _allocated; }; diff --git a/contrib/coco/core/src/IR/Conv2D.cpp b/contrib/coco/core/src/IR/Conv2D.cpp index 29570a8..f3bd5b4 100644 --- a/contrib/coco/core/src/IR/Conv2D.cpp +++ b/contrib/coco/core/src/IR/Conv2D.cpp @@ -5,8 +5,7 @@ namespace coco { -Conv2D::Conv2D(const PtrLink *op_link, const PtrLink *obj_link) - : _op_link{op_link}, _ker{obj_link, this} +Conv2D::Conv2D(const PtrLink *obj_link) : _ker{obj_link, this} { // DO NOTHING } diff --git a/contrib/coco/core/src/IR/Conv2D.test.cpp b/contrib/coco/core/src/IR/Conv2D.test.cpp index 86d81c9..14a4342 100644 --- a/contrib/coco/core/src/IR/Conv2D.test.cpp +++ b/contrib/coco/core/src/IR/Conv2D.test.cpp @@ -19,14 +19,13 @@ public: protected: coco::Conv2D *allocate(void) { - auto op = new coco::Conv2D{&op_link, &obj_link}; + auto op = new coco::Conv2D{&obj_link}; _allocated.emplace_back(op); return op; } protected: coco::PtrLink obj_link; - const coco::PtrLink op_link; protected: coco::ObjectManager obj_mgr{&obj_link}; diff --git a/contrib/coco/core/src/IR/Instr.test.cpp b/contrib/coco/core/src/IR/Instr.test.cpp index cdba1c6..50c71bb 100644 --- a/contrib/coco/core/src/IR/Instr.test.cpp +++ b/contrib/coco/core/src/IR/Instr.test.cpp @@ -14,10 +14,8 @@ public: protected: coco::PtrLink obj_link; - coco::PtrLink op_link; - coco::ObjectManager obj_mgr{&obj_link}; - coco::OpManager op_mgr{&op_link, &obj_link}; + coco::OpManager op_mgr{&obj_link}; }; } // namespace @@ -107,7 +105,7 @@ public: protected: coco::UnitF *allocate(void) { - auto ins = new coco::UnitF{&op_link, &obj_link}; + auto ins = new coco::UnitF{&obj_link}; _allocated.emplace_back(ins); return ins; } @@ -162,11 +160,9 @@ TEST_F(UnitFTest, op_update) ins->op(op); ASSERT_EQ(ins->op(), op); - ASSERT_EQ(op_link.find(op), ins); ins->op(nullptr); ASSERT_EQ(ins->op(), nullptr); - ASSERT_EQ(op_link.find(op), nullptr); } TEST_F(UnitFTest, visitor) diff --git a/contrib/coco/core/src/IR/InstrManager.cpp b/contrib/coco/core/src/IR/InstrManager.cpp index c8fd868..1b56724 100644 --- a/contrib/coco/core/src/IR/InstrManager.cpp +++ b/contrib/coco/core/src/IR/InstrManager.cpp @@ -11,7 +11,7 @@ namespace coco template <> UnitF *InstrManager::create(void) { - return take(nncc::foundation::make_unique(_op_link, _obj_link)); + return take(nncc::foundation::make_unique(_obj_link)); } template <> Shuffle *InstrManager::create(void) diff --git a/contrib/coco/core/src/IR/InstrManager.test.cpp b/contrib/coco/core/src/IR/InstrManager.test.cpp index 25aa636..b4fb33c 100644 --- a/contrib/coco/core/src/IR/InstrManager.test.cpp +++ b/contrib/coco/core/src/IR/InstrManager.test.cpp @@ -11,17 +11,15 @@ public: virtual ~InstrManagerTest() = default; protected: - coco::PtrLink op_link; coco::PtrLink obj_link; - coco::InstrManager mgr{&op_link, &obj_link}; + coco::InstrManager mgr{&obj_link}; }; } // namespace TEST(IR_INSTR_MANAGER, create_UnitF) { - coco::PtrLink op_link; coco::PtrLink obj_link; - coco::InstrManager mgr{&op_link, &obj_link}; + coco::InstrManager mgr{&obj_link}; // Conv2D { diff --git a/contrib/coco/core/src/IR/MaxPool2D.cpp b/contrib/coco/core/src/IR/MaxPool2D.cpp index 1846b92..fd67b63 100644 --- a/contrib/coco/core/src/IR/MaxPool2D.cpp +++ b/contrib/coco/core/src/IR/MaxPool2D.cpp @@ -3,7 +3,7 @@ namespace coco { -MaxPool2D::MaxPool2D(const PtrLink *op_link) : _op_link{op_link} +MaxPool2D::MaxPool2D() { // DO NOTHING } diff --git a/contrib/coco/core/src/IR/MaxPool2D.test.cpp b/contrib/coco/core/src/IR/MaxPool2D.test.cpp index 8ad1525..3bd93f8 100644 --- a/contrib/coco/core/src/IR/MaxPool2D.test.cpp +++ b/contrib/coco/core/src/IR/MaxPool2D.test.cpp @@ -23,14 +23,11 @@ public: protected: coco::MaxPool2D *allocate(void) { - auto op = new coco::MaxPool2D{&op_link}; + auto op = new coco::MaxPool2D; _allocated.emplace_back(op); return op; } -protected: - coco::PtrLink op_link; - private: std::vector> _allocated; }; diff --git a/contrib/coco/core/src/IR/Module.cpp b/contrib/coco/core/src/IR/Module.cpp index 1fdeadc..3479261 100644 --- a/contrib/coco/core/src/IR/Module.cpp +++ b/contrib/coco/core/src/IR/Module.cpp @@ -68,7 +68,6 @@ class ModuleImpl final : public coco::Module { public: std::unique_ptr> _obj_link; - std::unique_ptr> _op_link; public: coco::EntityManager *entity(void) override { return _entity.get(); } @@ -111,7 +110,6 @@ namespace coco std::unique_ptr Module::create(void) { auto obj_link = make_unique>(); - auto op_link = make_unique>(); auto m = make_unique<::ModuleImpl>(); @@ -119,8 +117,8 @@ std::unique_ptr Module::create(void) { mgr->_bag = make_unique(); mgr->_object = make_unique(obj_link.get()); - mgr->_op = make_unique(op_link.get(), obj_link.get()); - mgr->_instr = make_unique(op_link.get(), obj_link.get()); + mgr->_op = make_unique(obj_link.get()); + mgr->_instr = make_unique(obj_link.get()); mgr->_block = make_unique(); mgr->_input = make_unique(); mgr->_output = make_unique(); @@ -132,7 +130,6 @@ std::unique_ptr Module::create(void) m->_output = make_unique(); m->_obj_link = std::move(obj_link); - m->_op_link = std::move(op_link); return std::move(m); } diff --git a/contrib/coco/core/src/IR/OpManager.cpp b/contrib/coco/core/src/IR/OpManager.cpp index 7f8f082..ee81b86 100644 --- a/contrib/coco/core/src/IR/OpManager.cpp +++ b/contrib/coco/core/src/IR/OpManager.cpp @@ -9,29 +9,19 @@ using nncc::foundation::make_unique; namespace coco { -OpManager::OpManager(const PtrLink *op_link, const PtrLink *obj_link) - : _op_link{op_link}, _obj_link{obj_link} +OpManager::OpManager(const PtrLink *obj_link) : _obj_link{obj_link} { // DO NOTHING } -template <> Conv2D *OpManager::create(void) -{ - return take(make_unique(_op_link, _obj_link)); -} +template <> Conv2D *OpManager::create(void) { return take(make_unique(_obj_link)); } -template <> MaxPool2D *OpManager::create(void) -{ - return take(make_unique(_op_link)); -} +template <> MaxPool2D *OpManager::create(void) { return take(make_unique()); } -template <> AvgPool2D *OpManager::create(void) -{ - return take(make_unique(_op_link)); -} +template <> AvgPool2D *OpManager::create(void) { return take(make_unique()); } -template <> ReLU *OpManager::create(void) { return take(make_unique(_op_link)); } -template <> PadF *OpManager::create(void) { return take(make_unique(_op_link)); } +template <> ReLU *OpManager::create(void) { return take(make_unique()); } +template <> PadF *OpManager::create(void) { return take(make_unique()); } void OpManager::destroy(Op *op) { diff --git a/contrib/coco/core/src/IR/OpManager.test.cpp b/contrib/coco/core/src/IR/OpManager.test.cpp index 28159cf..d87509f 100644 --- a/contrib/coco/core/src/IR/OpManager.test.cpp +++ b/contrib/coco/core/src/IR/OpManager.test.cpp @@ -8,18 +8,16 @@ namespace class OpManagerTest : public ::testing::Test { protected: - coco::PtrLink op_link; coco::PtrLink obj_link; - coco::OpManager mgr{&op_link, &obj_link}; + coco::OpManager mgr{&obj_link}; }; } // namespace TEST(IR_OP_MANAGER, create_Conv2D) { - coco::PtrLink op_link; coco::PtrLink obj_link; - coco::OpManager mgr{&op_link, &obj_link}; + coco::OpManager mgr{&obj_link}; auto obj = mgr.create(); @@ -28,9 +26,8 @@ TEST(IR_OP_MANAGER, create_Conv2D) TEST(IR_OP_MANAGER, create_AvgPool2D) { - coco::PtrLink op_link; coco::PtrLink obj_link; - coco::OpManager mgr{&op_link, &obj_link}; + coco::OpManager mgr{&obj_link}; auto obj = mgr.create(); diff --git a/contrib/coco/core/src/IR/PadF.cpp b/contrib/coco/core/src/IR/PadF.cpp index 0eca3b7..fed839b 100644 --- a/contrib/coco/core/src/IR/PadF.cpp +++ b/contrib/coco/core/src/IR/PadF.cpp @@ -3,7 +3,7 @@ namespace coco { -PadF::PadF(const PtrLink *op_link) : _op_link{op_link} +PadF::PadF() { // DO NOTHING } diff --git a/contrib/coco/core/src/IR/PadF.test.cpp b/contrib/coco/core/src/IR/PadF.test.cpp index d5cffc6..01d47ca 100644 --- a/contrib/coco/core/src/IR/PadF.test.cpp +++ b/contrib/coco/core/src/IR/PadF.test.cpp @@ -23,14 +23,11 @@ public: protected: coco::PadF *allocate(void) { - auto op = new coco::PadF{&op_link}; + auto op = new coco::PadF; _allocated.emplace_back(op); return op; } -protected: - coco::PtrLink op_link; - private: std::vector> _allocated; }; diff --git a/contrib/coco/core/src/IR/ReLU.cpp b/contrib/coco/core/src/IR/ReLU.cpp index b280c14..9854b2c 100644 --- a/contrib/coco/core/src/IR/ReLU.cpp +++ b/contrib/coco/core/src/IR/ReLU.cpp @@ -3,7 +3,7 @@ namespace coco { -ReLU::ReLU(const PtrLink *op_link) : _op_link{op_link} +ReLU::ReLU() { // DO NOTHING } diff --git a/contrib/coco/core/src/IR/ReLU.test.cpp b/contrib/coco/core/src/IR/ReLU.test.cpp index 07a83ae..7ac553a 100644 --- a/contrib/coco/core/src/IR/ReLU.test.cpp +++ b/contrib/coco/core/src/IR/ReLU.test.cpp @@ -23,14 +23,11 @@ public: protected: coco::ReLU *allocate(void) { - auto op = new coco::ReLU{&op_link}; + auto op = new coco::ReLU; _allocated.emplace_back(op); return op; } -protected: - coco::PtrLink op_link; - private: std::vector> _allocated; }; diff --git a/contrib/coco/core/src/IR/UnitF.cpp b/contrib/coco/core/src/IR/UnitF.cpp index c31403d..96746f7 100644 --- a/contrib/coco/core/src/IR/UnitF.cpp +++ b/contrib/coco/core/src/IR/UnitF.cpp @@ -44,27 +44,6 @@ std::set UnitF::updates(void) const return res; } -void UnitF::op(Op *op) -{ - // NOTE _op_link is no longer used - // TODO Remove _op_link updates - if (_step.op() != nullptr) - { - auto _op = _step.op(); - assert(_op_link->find(_op) == this); - _op_link->unset(_op); - _step.op(nullptr); - } - - assert(_step.op() == nullptr); - - if (op != nullptr) - { - _step.op(op); - auto _op = _step.op(); - assert(_op_link->find(op) == nullptr); - _op_link->set(_op, this); - } -} +void UnitF::op(Op *op) { _step.op(op); } } // namespace coco -- 2.7.4