From: Efimov Alexander/AI Tools Lab/./Samsung Electronics Date: Fri, 1 Feb 2019 09:52:37 +0000 (+0300) Subject: [nnc] Eliminate redundant memory copy (#2984) X-Git-Tag: nncc_backup~887 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=98c4c1d8aa9ba59f45a12c21a0ac9be78007ee6a;p=platform%2Fcore%2Fml%2Fnnfw.git [nnc] Eliminate redundant memory copy (#2984) Do not copy memory in `Tensor::operator=` in case of constant argument Signed-off-by: Efimov Alexander --- 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; }