From d75e238d98d269eb1851b1ba7d20ad078512fc7f 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 17:13:02 +0900 Subject: [PATCH] [coco] Do NOT use Object-to-ObjectInfo link (#1527) Def and Use classes are now able to access the internals of Object without using Object-to-ObjectInfo link. Signed-off-by: Jonghyun Park --- contrib/coco/core/include/coco/IR/Conv2D.h | 2 +- contrib/coco/core/include/coco/IR/Def.h | 4 +--- contrib/coco/core/include/coco/IR/Instr.h | 2 +- contrib/coco/core/include/coco/IR/InstrManager.h | 8 +------- contrib/coco/core/include/coco/IR/ObjectManager.h | 8 +------- contrib/coco/core/include/coco/IR/OpManager.h | 5 +---- contrib/coco/core/include/coco/IR/UnitF.h | 3 +-- contrib/coco/core/include/coco/IR/Use.h | 4 +--- contrib/coco/core/src/IR/Conv2D.cpp | 2 +- contrib/coco/core/src/IR/Conv2D.test.cpp | 7 ++----- contrib/coco/core/src/IR/Def.test.cpp | 10 ++++------ contrib/coco/core/src/IR/Dep.test.cpp | 4 +--- contrib/coco/core/src/IR/Instr.cpp | 3 +-- contrib/coco/core/src/IR/Instr.test.cpp | 21 ++++++--------------- contrib/coco/core/src/IR/InstrManager.cpp | 2 +- contrib/coco/core/src/IR/InstrManager.test.cpp | 6 ++---- contrib/coco/core/src/IR/Module.cpp | 13 +++---------- contrib/coco/core/src/IR/ObjectManager.cpp | 4 ---- contrib/coco/core/src/IR/ObjectManager.test.cpp | 8 ++------ contrib/coco/core/src/IR/OpManager.cpp | 4 ++-- contrib/coco/core/src/IR/OpManager.test.cpp | 9 +++------ contrib/coco/core/src/IR/Use.test.cpp | 8 +++----- 22 files changed, 39 insertions(+), 98 deletions(-) diff --git a/contrib/coco/core/include/coco/IR/Conv2D.h b/contrib/coco/core/include/coco/IR/Conv2D.h index c860039..2827f5f 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 *); + explicit Conv2D(); public: std::set uses(void) const override; diff --git a/contrib/coco/core/include/coco/IR/Def.h b/contrib/coco/core/include/coco/IR/Def.h index 2febd16..3038412 100644 --- a/contrib/coco/core/include/coco/IR/Def.h +++ b/contrib/coco/core/include/coco/IR/Def.h @@ -12,9 +12,7 @@ namespace coco class Def final { public: - // NOTE Object-to-ObjectInfo link is no longer used - // TODO Simplify Def's constructor - Def(const PtrLink *, Object::Producer *producer) : _producer{producer} + Def(Object::Producer *producer) : _producer{producer} { // DO NOTHING } diff --git a/contrib/coco/core/include/coco/IR/Instr.h b/contrib/coco/core/include/coco/IR/Instr.h index 8976cc7..e877b74 100644 --- a/contrib/coco/core/include/coco/IR/Instr.h +++ b/contrib/coco/core/include/coco/IR/Instr.h @@ -152,7 +152,7 @@ namespace coco class FeatureInstr : public Instr, public Object::Producer, public Object::Consumer { public: - FeatureInstr(const PtrLink *obj_link); + FeatureInstr(); public: FeatureInstr(const FeatureInstr &) = delete; diff --git a/contrib/coco/core/include/coco/IR/InstrManager.h b/contrib/coco/core/include/coco/IR/InstrManager.h index c5b5e1e..2557822 100644 --- a/contrib/coco/core/include/coco/IR/InstrManager.h +++ b/contrib/coco/core/include/coco/IR/InstrManager.h @@ -22,10 +22,7 @@ namespace coco class InstrManager final : public PtrManager { public: - InstrManager(const PtrLink *obj_link) : _obj_link{obj_link} - { - // DO NOTHING - } + InstrManager() = default; public: template Ins *create(void); @@ -37,9 +34,6 @@ public: // NOTE destroy(ins) WILL NOT update ins->parent(). An Instruction SHOULD BE detacted from a // module before destroy call void destroy(Instr *); - -private: - const PtrLink *const _obj_link; }; } // namespace coco diff --git a/contrib/coco/core/include/coco/IR/ObjectManager.h b/contrib/coco/core/include/coco/IR/ObjectManager.h index e02c2ca..29500f0 100644 --- a/contrib/coco/core/include/coco/IR/ObjectManager.h +++ b/contrib/coco/core/include/coco/IR/ObjectManager.h @@ -18,17 +18,11 @@ namespace coco class ObjectManager : public PtrManager { public: - ObjectManager(PtrLink *obj_link) : _obj_link{obj_link} - { - // DO NOTHING - } + ObjectManager() = default; public: FeatureObject *create(const nncc::core::ADT::feature::Shape &shape); KernelObject *create(const nncc::core::ADT::kernel::Shape &shape); - -private: - PtrLink *const _obj_link; }; } // namespace coco diff --git a/contrib/coco/core/include/coco/IR/OpManager.h b/contrib/coco/core/include/coco/IR/OpManager.h index de530dd..a4c412a 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 *obj_link); + OpManager(); public: template T *create(void); @@ -32,9 +32,6 @@ public: // NOTE OpManager will invoke dispose before deallocation // NOTE destroy(op) WILL NOT update op->parent(). Client SHOULD detach op before destroy(op) call void destroy(Op *); - -private: - const PtrLink *const _obj_link; }; } // namespace coco diff --git a/contrib/coco/core/include/coco/IR/UnitF.h b/contrib/coco/core/include/coco/IR/UnitF.h index 11be69d..e2e0625 100644 --- a/contrib/coco/core/include/coco/IR/UnitF.h +++ b/contrib/coco/core/include/coco/IR/UnitF.h @@ -16,8 +16,7 @@ namespace coco class UnitF final : public FeatureInstr { public: - // TODO Update constructor - UnitF(const PtrLink *obj_link) : FeatureInstr{obj_link} { _step.instr(this); } + UnitF() { _step.instr(this); } public: UnitF *asUnitF(void) override { return this; } diff --git a/contrib/coco/core/include/coco/IR/Use.h b/contrib/coco/core/include/coco/IR/Use.h index 3060ee6..9a1042a 100644 --- a/contrib/coco/core/include/coco/IR/Use.h +++ b/contrib/coco/core/include/coco/IR/Use.h @@ -12,9 +12,7 @@ namespace coco class Use final { public: - // NOTE Object-to-ObjectInfo link is no longer used - // TODO Do NOT take Object-to-ObjectInfo link as an arugment - Use(const PtrLink *, Object::Consumer *use) : _value{nullptr}, _consumer{use} + Use(Object::Consumer *use) : _value{nullptr}, _consumer{use} { // DO NOTHING } diff --git a/contrib/coco/core/src/IR/Conv2D.cpp b/contrib/coco/core/src/IR/Conv2D.cpp index f3bd5b4..0eaf222 100644 --- a/contrib/coco/core/src/IR/Conv2D.cpp +++ b/contrib/coco/core/src/IR/Conv2D.cpp @@ -5,7 +5,7 @@ namespace coco { -Conv2D::Conv2D(const PtrLink *obj_link) : _ker{obj_link, this} +Conv2D::Conv2D() : _ker{this} { // DO NOTHING } diff --git a/contrib/coco/core/src/IR/Conv2D.test.cpp b/contrib/coco/core/src/IR/Conv2D.test.cpp index 14a4342..018a782 100644 --- a/contrib/coco/core/src/IR/Conv2D.test.cpp +++ b/contrib/coco/core/src/IR/Conv2D.test.cpp @@ -19,16 +19,13 @@ public: protected: coco::Conv2D *allocate(void) { - auto op = new coco::Conv2D{&obj_link}; + auto op = new coco::Conv2D; _allocated.emplace_back(op); return op; } protected: - coco::PtrLink obj_link; - -protected: - coco::ObjectManager obj_mgr{&obj_link}; + coco::ObjectManager obj_mgr; private: std::vector> _allocated; diff --git a/contrib/coco/core/src/IR/Def.test.cpp b/contrib/coco/core/src/IR/Def.test.cpp index d0711b6..331fa49 100644 --- a/contrib/coco/core/src/IR/Def.test.cpp +++ b/contrib/coco/core/src/IR/Def.test.cpp @@ -17,9 +17,7 @@ namespace class DefTest : public ::testing::Test { protected: - coco::PtrLink obj_link; - - coco::ObjectManager obj_mgr{&obj_link}; + coco::ObjectManager obj_mgr; }; } // namespace @@ -30,7 +28,7 @@ TEST_F(DefTest, constructor) ::mock::Def def; // TODO Rename 'slot' - coco::Def slot{&obj_link, &def}; + coco::Def slot{&def}; ASSERT_EQ(slot.value(), nullptr); } @@ -42,7 +40,7 @@ TEST_F(DefTest, value) ::mock::Def def; // TODO Rename 'slot' - coco::Def slot{&obj_link, &def}; + coco::Def slot{&def}; slot.value(o); @@ -62,7 +60,7 @@ TEST_F(DefTest, unlink_on_destruction) ::mock::Def def; // TODO Rename 'slot' - auto slot = make_unique(&obj_link, &def); + auto slot = make_unique(&def); slot->value(o); ASSERT_EQ(o->def(), slot.get()); diff --git a/contrib/coco/core/src/IR/Dep.test.cpp b/contrib/coco/core/src/IR/Dep.test.cpp index 95d39a7..078f4c2 100644 --- a/contrib/coco/core/src/IR/Dep.test.cpp +++ b/contrib/coco/core/src/IR/Dep.test.cpp @@ -16,10 +16,8 @@ namespace class DepTest : public ::testing::Test { protected: - coco::PtrLink obj_link; - coco::BagManager bag_mgr; - coco::ObjectManager obj_mgr{&obj_link}; + coco::ObjectManager obj_mgr; }; } // namespace diff --git a/contrib/coco/core/src/IR/Instr.cpp b/contrib/coco/core/src/IR/Instr.cpp index 6cd5cd7..fedcc3a 100644 --- a/contrib/coco/core/src/IR/Instr.cpp +++ b/contrib/coco/core/src/IR/Instr.cpp @@ -16,8 +16,7 @@ template <> InstrList *DLinkedList::head(Block *b) { return b->ins namespace coco { -FeatureInstr::FeatureInstr(const PtrLink *obj_link) - : _ifm{obj_link, this}, _ofm{obj_link, this} +FeatureInstr::FeatureInstr() : _ifm{this}, _ofm{this} { // DO NOTHING } diff --git a/contrib/coco/core/src/IR/Instr.test.cpp b/contrib/coco/core/src/IR/Instr.test.cpp index 50c71bb..1e380ac 100644 --- a/contrib/coco/core/src/IR/Instr.test.cpp +++ b/contrib/coco/core/src/IR/Instr.test.cpp @@ -12,10 +12,8 @@ public: virtual ~InstrTest() = default; protected: - coco::PtrLink obj_link; - - coco::ObjectManager obj_mgr{&obj_link}; - coco::OpManager op_mgr{&obj_link}; + coco::ObjectManager obj_mgr; + coco::OpManager op_mgr; }; } // namespace @@ -35,13 +33,6 @@ namespace mock struct FeatureInstr : public coco::FeatureInstr { public: - FeatureInstr(const coco::PtrLink *obj_link) - : coco::FeatureInstr{obj_link} - { - // DO NOTHING - } - -public: std::set reads(void) const override { return std::set(); } std::set updates(void) const override { return std::set(); } @@ -53,7 +44,7 @@ public: TEST_F(FeatureInstrTest, ctor) { - ::mock::FeatureInstr ins{&obj_link}; + ::mock::FeatureInstr ins; // IFM and OFM should be initialized as nullptr ASSERT_EQ(ins.ifm(), nullptr); @@ -66,7 +57,7 @@ TEST_F(FeatureInstrTest, ifm_update) auto obj = obj_mgr.create(nncc::core::ADT::feature::Shape{1, 3, 3}); // Test 'FeatureInstr' class - ::mock::FeatureInstr ins{&obj_link}; + ::mock::FeatureInstr ins; // 'ifm(FeatureObject *)' method should affect 'ifm()' method ins.ifm(obj); @@ -82,7 +73,7 @@ TEST_F(FeatureInstrTest, ofm_update) auto obj = obj_mgr.create(nncc::core::ADT::feature::Shape{1, 3, 3}); // Test 'FeatureInstr' class - ::mock::FeatureInstr ins{&obj_link}; + ::mock::FeatureInstr ins; // 'ofm(FeatureObject *)' method should affect 'ofm()' method ins.ofm(obj); @@ -105,7 +96,7 @@ public: protected: coco::UnitF *allocate(void) { - auto ins = new coco::UnitF{&obj_link}; + auto ins = new coco::UnitF; _allocated.emplace_back(ins); return ins; } diff --git a/contrib/coco/core/src/IR/InstrManager.cpp b/contrib/coco/core/src/IR/InstrManager.cpp index 1b56724..11ff2a2 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(_obj_link)); + return take(nncc::foundation::make_unique()); } 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 b4fb33c..3b18d75 100644 --- a/contrib/coco/core/src/IR/InstrManager.test.cpp +++ b/contrib/coco/core/src/IR/InstrManager.test.cpp @@ -11,15 +11,13 @@ public: virtual ~InstrManagerTest() = default; protected: - coco::PtrLink obj_link; - coco::InstrManager mgr{&obj_link}; + coco::InstrManager mgr; }; } // namespace TEST(IR_INSTR_MANAGER, create_UnitF) { - coco::PtrLink obj_link; - coco::InstrManager mgr{&obj_link}; + coco::InstrManager mgr; // Conv2D { diff --git a/contrib/coco/core/src/IR/Module.cpp b/contrib/coco/core/src/IR/Module.cpp index 3479261..aeaf28b 100644 --- a/contrib/coco/core/src/IR/Module.cpp +++ b/contrib/coco/core/src/IR/Module.cpp @@ -67,9 +67,6 @@ namespace class ModuleImpl final : public coco::Module { public: - std::unique_ptr> _obj_link; - -public: coco::EntityManager *entity(void) override { return _entity.get(); } const coco::EntityManager *entity(void) const override { return _entity.get(); } @@ -109,16 +106,14 @@ namespace coco std::unique_ptr Module::create(void) { - auto obj_link = make_unique>(); - auto m = make_unique<::ModuleImpl>(); auto mgr = make_unique<::EntityManagerImpl>(); { mgr->_bag = make_unique(); - mgr->_object = make_unique(obj_link.get()); - mgr->_op = make_unique(obj_link.get()); - mgr->_instr = make_unique(obj_link.get()); + mgr->_object = make_unique(); + mgr->_op = make_unique(); + mgr->_instr = make_unique(); mgr->_block = make_unique(); mgr->_input = make_unique(); mgr->_output = make_unique(); @@ -129,8 +124,6 @@ std::unique_ptr Module::create(void) m->_input = make_unique(); m->_output = make_unique(); - m->_obj_link = std::move(obj_link); - return std::move(m); } diff --git a/contrib/coco/core/src/IR/ObjectManager.cpp b/contrib/coco/core/src/IR/ObjectManager.cpp index 7a19778..fcf3af6 100644 --- a/contrib/coco/core/src/IR/ObjectManager.cpp +++ b/contrib/coco/core/src/IR/ObjectManager.cpp @@ -20,8 +20,6 @@ FeatureObject *ObjectManager::create(const nncc::core::ADT::feature::Shape &shap auto feature = make_unique(std::move(info)); auto feature_ptr = feature.get(); - _obj_link->set(feature_ptr, info_ptr); - return take(std::move(feature)); } @@ -33,8 +31,6 @@ KernelObject *ObjectManager::create(const nncc::core::ADT::kernel::Shape &shape) auto kernel = make_unique(std::move(info)); auto kernel_ptr = kernel.get(); - _obj_link->set(kernel_ptr, info_ptr); - return take(std::move(kernel)); } diff --git a/contrib/coco/core/src/IR/ObjectManager.test.cpp b/contrib/coco/core/src/IR/ObjectManager.test.cpp index 256ea06..9378212 100644 --- a/contrib/coco/core/src/IR/ObjectManager.test.cpp +++ b/contrib/coco/core/src/IR/ObjectManager.test.cpp @@ -11,13 +11,11 @@ TEST(IR_OBJECT_MANAGER, create_feature) const Shape shape{1, 3, 3}; - coco::PtrLink obj_link; - coco::ObjectManager mgr{&obj_link}; + coco::ObjectManager mgr; auto o = mgr.create(shape); ASSERT_EQ(o->shape(), shape); - ASSERT_NE(obj_link.find(o), nullptr); } TEST(IR_OBJECT_MANAGER, create_kernel) @@ -26,8 +24,7 @@ TEST(IR_OBJECT_MANAGER, create_kernel) const Shape shape{1, 1, 3, 3}; - coco::PtrLink obj_link; - coco::ObjectManager mgr{&obj_link}; + coco::ObjectManager mgr; auto o = mgr.create(shape); @@ -35,5 +32,4 @@ TEST(IR_OBJECT_MANAGER, create_kernel) ASSERT_EQ(o->shape().depth(), shape.depth()); ASSERT_EQ(o->shape().height(), shape.height()); ASSERT_EQ(o->shape().width(), shape.width()); - ASSERT_NE(obj_link.find(o), nullptr); } diff --git a/contrib/coco/core/src/IR/OpManager.cpp b/contrib/coco/core/src/IR/OpManager.cpp index ee81b86..2a0c66a 100644 --- a/contrib/coco/core/src/IR/OpManager.cpp +++ b/contrib/coco/core/src/IR/OpManager.cpp @@ -9,12 +9,12 @@ using nncc::foundation::make_unique; namespace coco { -OpManager::OpManager(const PtrLink *obj_link) : _obj_link{obj_link} +OpManager::OpManager() { // DO NOTHING } -template <> Conv2D *OpManager::create(void) { return take(make_unique(_obj_link)); } +template <> Conv2D *OpManager::create(void) { return take(make_unique()); } template <> MaxPool2D *OpManager::create(void) { return take(make_unique()); } diff --git a/contrib/coco/core/src/IR/OpManager.test.cpp b/contrib/coco/core/src/IR/OpManager.test.cpp index d87509f..d8a4bf4 100644 --- a/contrib/coco/core/src/IR/OpManager.test.cpp +++ b/contrib/coco/core/src/IR/OpManager.test.cpp @@ -8,16 +8,14 @@ namespace class OpManagerTest : public ::testing::Test { protected: - coco::PtrLink obj_link; - coco::OpManager mgr{&obj_link}; + coco::OpManager mgr; }; } // namespace TEST(IR_OP_MANAGER, create_Conv2D) { - coco::PtrLink obj_link; - coco::OpManager mgr{&obj_link}; + coco::OpManager mgr; auto obj = mgr.create(); @@ -26,8 +24,7 @@ TEST(IR_OP_MANAGER, create_Conv2D) TEST(IR_OP_MANAGER, create_AvgPool2D) { - coco::PtrLink obj_link; - coco::OpManager mgr{&obj_link}; + coco::OpManager mgr; auto obj = mgr.create(); diff --git a/contrib/coco/core/src/IR/Use.test.cpp b/contrib/coco/core/src/IR/Use.test.cpp index af5eb0b..6fc15d7 100644 --- a/contrib/coco/core/src/IR/Use.test.cpp +++ b/contrib/coco/core/src/IR/Use.test.cpp @@ -13,9 +13,7 @@ namespace class UseTest : public ::testing::Test { protected: - coco::PtrLink obj_link; - - coco::ObjectManager obj_mgr{&obj_link}; + coco::ObjectManager obj_mgr; }; } // namespace @@ -25,7 +23,7 @@ TEST_F(UseTest, constructor) ::mock::Use use; - coco::Use slot{&obj_link, &use}; + coco::Use slot{&use}; ASSERT_EQ(slot.value(), nullptr); } @@ -36,7 +34,7 @@ TEST_F(UseTest, value) ::mock::Use use; - coco::Use slot{&obj_link, &use}; + coco::Use slot{&use}; slot.value(o); -- 2.7.4