From 98c4c1d8aa9ba59f45a12c21a0ac9be78007ee6a Mon Sep 17 00:00:00 2001 From: "Efimov Alexander/AI Tools Lab/./Samsung Electronics" Date: Fri, 1 Feb 2019 12:52:37 +0300 Subject: [PATCH] [nnc] Eliminate redundant memory copy (#2984) Do not copy memory in `Tensor::operator=` in case of constant argument Signed-off-by: Efimov Alexander --- .../code_snippets/cpp_header_types.def | 24 +++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/contrib/nnc/passes/soft_backend/code_snippets/cpp_header_types.def b/contrib/nnc/passes/soft_backend/code_snippets/cpp_header_types.def index 09983ce..77efd9a 100644 --- a/contrib/nnc/passes/soft_backend/code_snippets/cpp_header_types.def +++ b/contrib/nnc/passes/soft_backend/code_snippets/cpp_header_types.def @@ -145,14 +145,24 @@ public: std::memcpy(_data, data, num_elements * sizeof(float)); } - Tensor &operator=(const Tensor &t) - { - assert(_managed); - if (this != &t) - { - reshape(t.getShape()); - fillData(t._data, t._shape.getNumElems()); + Tensor& operator=(const Tensor& t) { + if (this == &t) + return *this; + + if (!t._managed) { + if (_managed) + delete _data; + + _managed = false; + _data = t._data; + _shape = t._shape; + } else { + // this tensor is not constant so we can write data into it + assert(_managed); + reshape(t._shape); + fillData(t._data, _shape.getNumElems()); } + return *this; } -- 2.7.4