Skip to content
Snippets Groups Projects
Commit 5de72b4e authored by Maxence Naud's avatar Maxence Naud
Browse files

[Upd] Each Operator copy constructor create a new implementation with same backend

parent 1ad5bd25
No related branches found
No related tags found
1 merge request!8GraphView cloning proposal + labelGraph proof of concept
Pipeline #32207 passed
Showing
with 18 additions and 4 deletions
...@@ -51,7 +51,7 @@ public: ...@@ -51,7 +51,7 @@ public:
* @brief Copy-constructor. Copy the operator parameters and its output tensor(s), but not its input tensors (the new operator has no input associated). * @brief Copy-constructor. Copy the operator parameters and its output tensor(s), but not its input tensors (the new operator has no input associated).
* @param op Operator to copy. * @param op Operator to copy.
*/ */
Add_Op(const Add_Op& op) Add_Op(const Add_Op<NUM>& op)
: Operator(Type), : Operator(Type),
mOutput(std::make_shared<Tensor>(*op.mOutput)) mOutput(std::make_shared<Tensor>(*op.mOutput))
{ {
...@@ -61,6 +61,7 @@ public: ...@@ -61,6 +61,7 @@ public:
mInputs[i] = std::make_shared<Tensor>(); mInputs[i] = std::make_shared<Tensor>();
} }
setDatatype(op.mOutput->dataType()); setDatatype(op.mOutput->dataType());
mImpl = op.mImpl ? Registrar<Add_Op<NUM>>::create(mOutput->getImpl()->backend())(*this) : nullptr;
} }
/** /**
......
...@@ -66,13 +66,14 @@ public: ...@@ -66,13 +66,14 @@ public:
* @brief Copy-constructor. Copy the operator parameters and its output tensor(s), but not its input tensors (the new operator has no input associated). * @brief Copy-constructor. Copy the operator parameters and its output tensor(s), but not its input tensors (the new operator has no input associated).
* @param op Operator to copy. * @param op Operator to copy.
*/ */
AvgPooling_Op(const AvgPooling_Op& op) AvgPooling_Op(const AvgPooling_Op<DIM>& op)
: Operator(Type), : Operator(Type),
Parameterizable_(op), Parameterizable_(op),
mOutput(std::make_shared<Tensor>(*op.mOutput)) mOutput(std::make_shared<Tensor>(*op.mOutput))
{ {
// cpy-ctor // cpy-ctor
setDatatype(op.mOutput->dataType()); setDatatype(op.mOutput->dataType());
mImpl = op.mImpl ? Registrar<AvgPooling_Op<DIM>>::create(mOutput->getImpl()->backend())(*this) : nullptr;
} }
/** /**
......
...@@ -66,6 +66,7 @@ public: ...@@ -66,6 +66,7 @@ public:
{ {
// cpy-ctor // cpy-ctor
setDatatype(op.mOutput->dataType()); setDatatype(op.mOutput->dataType());
mImpl = op.mImpl ? Registrar<BatchNorm_Op<DIM>>::create(mOutput->getImpl()->backend())(*this) : nullptr;
} }
/** /**
......
...@@ -76,6 +76,7 @@ public: ...@@ -76,6 +76,7 @@ public:
{ {
// cpy-ctor // cpy-ctor
setDatatype(op.mOutput->dataType()); setDatatype(op.mOutput->dataType());
mImpl = op.mImpl ? Registrar<Conv_Op<DIM>>::create(mOutput->getImpl()->backend())(*this) : nullptr;
} }
/** /**
......
...@@ -81,6 +81,7 @@ class ConvDepthWise_Op : public Operator, ...@@ -81,6 +81,7 @@ class ConvDepthWise_Op : public Operator,
{ {
// cpy-ctor // cpy-ctor
setDatatype(op.mOutput->dataType()); setDatatype(op.mOutput->dataType());
mImpl = op.mImpl ? Registrar<ConvDepthWise_Op<DIM>>::create(mOutput->getImpl()->backend())(*this) : nullptr;
} }
/** /**
......
...@@ -67,6 +67,7 @@ public: ...@@ -67,6 +67,7 @@ public:
{ {
// cpy-ctor // cpy-ctor
setDatatype(op.mOutput->dataType()); setDatatype(op.mOutput->dataType());
mImpl = op.mImpl ? Registrar<FC_Op>::create(mOutput->getImpl()->backend())(*this) : nullptr;
} }
/** /**
......
...@@ -159,7 +159,7 @@ class GenericOperator_Op ...@@ -159,7 +159,7 @@ class GenericOperator_Op
if (mComputeOutputDims) { if (mComputeOutputDims) {
return !(mOutputs[0]->empty()); return !(mOutputs[0]->empty());
} }
else { else {
assert(false && "GenericOperator cannot forward dims"); assert(false && "GenericOperator cannot forward dims");
return false; return false;
} }
......
...@@ -64,6 +64,7 @@ public: ...@@ -64,6 +64,7 @@ public:
{ {
// cpy-ctor // cpy-ctor
setDatatype(op.mOutput->dataType()); setDatatype(op.mOutput->dataType());
mImpl = op.mImpl ? Registrar<LeakyReLU_Op>::create(mOutput->getImpl()->backend())(*this) : nullptr;
} }
/** /**
......
...@@ -65,6 +65,7 @@ public: ...@@ -65,6 +65,7 @@ public:
{ {
// cpy-ctor // cpy-ctor
setDatatype(op.mOutput->dataType()); setDatatype(op.mOutput->dataType());
mImpl = op.mImpl ? Registrar<Matmul_Op>::create(mOutput->getImpl()->backend())(*this) : nullptr;
} }
/** /**
......
...@@ -67,13 +67,14 @@ public: ...@@ -67,13 +67,14 @@ public:
* @brief Copy-constructor. Copy the operator parameters and its output tensor(s), but not its input tensors (the new operator has no input associated). * @brief Copy-constructor. Copy the operator parameters and its output tensor(s), but not its input tensors (the new operator has no input associated).
* @param op Operator to copy. * @param op Operator to copy.
*/ */
MaxPooling_Op(const MaxPooling_Op& op) MaxPooling_Op(const MaxPooling_Op<DIM>& op)
: Operator(Type), : Operator(Type),
Parameterizable_(op), Parameterizable_(op),
mOutput(std::make_shared<Tensor>(*op.mOutput)) mOutput(std::make_shared<Tensor>(*op.mOutput))
{ {
// cpy-ctor // cpy-ctor
setDatatype(op.mOutput->dataType()); setDatatype(op.mOutput->dataType());
mImpl = op.mImpl ? Registrar<MaxPooling_Op<DIM>>::create(mOutput->getImpl()->backend())(*this) : nullptr;
} }
/** /**
......
...@@ -42,6 +42,7 @@ public: ...@@ -42,6 +42,7 @@ public:
std::enable_shared_from_this<Operator>() std::enable_shared_from_this<Operator>()
{ {
mType = op.mType; mType = op.mType;
mImpl = nullptr;
// Implementation is never cloned. It is up to the non-abstract Operator copy-constructor to create a new implementation matching the copied Operator implementation. // Implementation is never cloned. It is up to the non-abstract Operator copy-constructor to create a new implementation matching the copied Operator implementation.
// See https://gitlab.eclipse.org/eclipse/aidge/aidge_core/-/merge_requests/8#note_1214050 for the discussion. // See https://gitlab.eclipse.org/eclipse/aidge/aidge_core/-/merge_requests/8#note_1214050 for the discussion.
// Hooks are not copied. // Hooks are not copied.
......
...@@ -60,6 +60,7 @@ public: ...@@ -60,6 +60,7 @@ public:
{ {
// cpy-ctor // cpy-ctor
setDatatype(op.mOutput->dataType()); setDatatype(op.mOutput->dataType());
mImpl = op.mImpl ? Registrar<Producer_Op>::create(mOutput->getImpl()->backend())(*this) : nullptr;
} }
/** /**
......
...@@ -52,6 +52,7 @@ public: ...@@ -52,6 +52,7 @@ public:
{ {
// cpy-ctor // cpy-ctor
setDatatype(op.mOutput->dataType()); setDatatype(op.mOutput->dataType());
mImpl = op.mImpl ? Registrar<ReLU_Op>::create(mOutput->getImpl()->backend())(*this) : nullptr;
} }
/** /**
......
...@@ -66,6 +66,7 @@ public: ...@@ -66,6 +66,7 @@ public:
{ {
// cpy-ctor // cpy-ctor
setDatatype(op.mOutput->dataType()); setDatatype(op.mOutput->dataType());
mImpl = op.mImpl ? Registrar<Scaling_Op>::create(mOutput->getImpl()->backend())(*this) : nullptr;
} }
/** /**
......
...@@ -52,6 +52,7 @@ public: ...@@ -52,6 +52,7 @@ public:
{ {
// cpy-ctor // cpy-ctor
setDatatype(op.mOutput->dataType()); setDatatype(op.mOutput->dataType());
mImpl = op.mImpl ? Registrar<Softmax_Op>::create(mOutput->getImpl()->backend())(*this) : nullptr;
} }
/** /**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment