[inplace opt] Support in-place no-op flatten layer
authorParichay Kapoor <pk.kapoor@samsung.com>
Mon, 6 Sep 2021 04:50:40 +0000 (13:50 +0900)
committerJijoong Moon <jijoong.moon@samsung.com>
Wed, 6 Oct 2021 08:07:09 +0000 (17:07 +0900)
commit448b45088d7dd544f9dafb6c3a3cbe843e7c1f4f
treec29cf58eab5b0667e0cfc7361411440dc0cc590f
parent6822abb2d01d9af34e9942e9b3bf69e12418bab8
[inplace opt] Support in-place no-op flatten layer

This patch updates the flatten layer to be a no-op layer. This is done
with the flatten layer setting the input and output shapes at finalize
time and making flatten layer execute in-place. Changes in this patch:
1. requestPreallocatedTensor() in TensorPool now returns a new tensor
which will eventually share the memory with the preallocated tensor than
returning the preallocated tensor itself. This allows tensor metadata to
be changed (like name, shape, etc) which sharing the memory. This is
done by storing the dependency link between tensors in token.
Corresponding unittests are also added.
2. Manager now supports giving shared tensors for outputs (shared with
some inputs) to support in-place running of some layers.
3. Flatten layer is updated to be a basic no-op and to perform
flattening once at compile time.
4. Update flatten layer supportBackwarding to true
5. Input layer updated to not edit tensor mapping. Input layer will be
updated to be in-place in the next patch.

Signed-off-by: Parichay Kapoor <pk.kapoor@samsung.com>
nntrainer/graph/network_graph.cpp
nntrainer/layers/flatten_layer.cpp
nntrainer/layers/flatten_layer.h
nntrainer/layers/input_layer.cpp
nntrainer/tensor/manager.cpp
nntrainer/tensor/manager.h
nntrainer/tensor/tensor_pool.cpp
nntrainer/tensor/tensor_pool.h
test/unittest/compiler/unittest_interpreter.cpp
test/unittest/unittest_nntrainer_tensor_pool.cpp