std::set<Object *> uses(void) const override;
public:
- void dispose(void) override;
-
-public:
AvgPool2D *asAvgPool2D(void) override { return this; }
const AvgPool2D *asAvgPool2D(void) const override { return this; }
const Conv2D *asConv2D(void) const override { return this; }
public:
- void dispose(void) override;
-
-public:
Instr *loc(void) override { return parent(); }
private:
const MaxPool2D *asMaxPool2D(void) const override { return this; }
public:
- void dispose(void) override;
-
-public:
Window2D *window(void) { return &_window; }
const Window2D *window(void) const { return &_window; }
public:
Instr *parent(void) const;
-public:
- // @brief Release all the references
- //
- // NOTE The state after dispose SHOULD be identical to that just after construction
- // TODO Rewrite as a pure virtual method once all the existing Op implement this method
- virtual void dispose(void) { return; }
-
private:
// @brief A link to Instr from Op
//
public:
// @brief Destroy (= deallocate) a Op instance
//
- // 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 *);
};
const PadF *asPadF(void) const override { return this; }
public:
- void dispose(void) override;
-
-public:
Padding2D *pad(void) { return &_pad; }
const Padding2D *pad(void) const { return &_pad; }
return res;
}
-void AvgPool2D::dispose(void)
-{
- // NOTE AvgPool2D references no object
- return;
-}
-
} // namespace coco
// DO NOTHING
}
-void Conv2D::dispose(void)
-{
- // Release kernel object
- ker(nullptr);
-}
-
std::set<Object *> Conv2D::uses(void) const
{
std::set<Object *> res;
ASSERT_TRUE(immutable_ptr->accept(IsConv2D{}));
}
-TEST_F(Conv2DTest, dispose)
-{
- // Prepare a kernel object for testing
- auto obj = obj_mgr.create(nncc::core::ADT::kernel::Shape{1, 1, 3, 3});
-
- // Create 'Conv2D' op
- auto op = allocate();
-
- op->ker(obj);
- op->dispose();
-
- // dispose() SHOULD release kernel object
- ASSERT_EQ(op->ker(), nullptr);
- ASSERT_EQ(obj->uses()->size(), 0);
-}
-
TEST_F(Conv2DTest, destructor)
{
// Prepare a kernel object for testing
// DO NOTHING
}
-void MaxPool2D::dispose(void)
-{
- // NOTE MaxPool2D references no object
- return;
-}
-
std::set<Object *> MaxPool2D::uses(void) const
{
// NOTE MaxPool2D accesses no object except IFM/OFM
void OpManager::destroy(Op *op)
{
assert(op->parent() == nullptr);
- op->dispose();
release(op);
}
return res;
}
-void PadF::dispose(void)
-{
- // NOTE PadF has nothing to release
-}
-
} // namespace coco