From 2b3c257ce774ba3ab78e670a9a445fd6058fb8d7 Mon Sep 17 00:00:00 2001 From: Jihoon Lee Date: Fri, 5 Nov 2021 16:36:06 +0900 Subject: [PATCH] [Tpool] Remove updateExternalTensor Instead of requesting externally to update external tensor, now syncing dependency done upon request and renamed to `fillPlaceholder` to align with incoming changes **Self evaluation:** 1. Build test: [X]Passed [ ]Failed [ ]Skipped 2. Run test: [X]Passed [ ]Failed [ ]Skipped Signed-off-by: Jihoon Lee --- nntrainer/graph/network_graph.cpp | 7 +++---- nntrainer/tensor/manager.h | 12 ++---------- nntrainer/tensor/tensor_pool.cpp | 15 +++++---------- nntrainer/tensor/tensor_pool.h | 9 +-------- test/unittest/unittest_nntrainer_tensor_pool.cpp | 3 +-- 5 files changed, 12 insertions(+), 34 deletions(-) diff --git a/nntrainer/graph/network_graph.cpp b/nntrainer/graph/network_graph.cpp index cb97668..66826c3 100644 --- a/nntrainer/graph/network_graph.cpp +++ b/nntrainer/graph/network_graph.cpp @@ -1064,11 +1064,11 @@ void NetworkGraph::setExternalTensors(const std::vector &data, /// feed or clear label for (unsigned int idx = 0; idx < names.size(); idx++) { if (data.empty()) - tensor_manager->setExternalTensor(names[idx], Tensor()); + tensor_manager->fillPlaceholder(names[idx], Tensor()); else if (data.size() == 1) - tensor_manager->setExternalTensor(names[idx], data[0]); + tensor_manager->fillPlaceholder(names[idx], data[0]); else - tensor_manager->setExternalTensor(names[idx], data[idx]); + tensor_manager->fillPlaceholder(names[idx], data[idx]); } } @@ -1089,7 +1089,6 @@ void NetworkGraph::setInputsLabels(const std::vector &inputs, setExternalTensors(inputs, input_list); setExternalTensors(labels, label_list); - tensor_manager->updateExternalTensors(); } void NetworkGraph::setInputsLabels(sharedConstTensors &inputs, diff --git a/nntrainer/tensor/manager.h b/nntrainer/tensor/manager.h index 8776f2f..8749305 100644 --- a/nntrainer/tensor/manager.h +++ b/nntrainer/tensor/manager.h @@ -333,21 +333,13 @@ public: void setOptimizations(bool val) { enable_optimizations = val; } /** - * @brief Update the dependency on external tensors - */ - void updateExternalTensors() { - weight_pool.updateExternalTensors(); - tensor_pool.updateExternalTensors(); - } - - /** * @brief Update externally dependent tensors * * @param name Name of the tensor * @param t External tensor */ - void setExternalTensor(const std::string &name, const Tensor &t) { - tensor_pool.setExternalTensor(name, t); + void fillPlaceholder(const std::string &name, const Tensor &t) { + tensor_pool.fillPlaceholder(name, t); } /** diff --git a/nntrainer/tensor/tensor_pool.cpp b/nntrainer/tensor/tensor_pool.cpp index f4f58c3..65cf401 100644 --- a/nntrainer/tensor/tensor_pool.cpp +++ b/nntrainer/tensor/tensor_pool.cpp @@ -240,6 +240,7 @@ void TensorPool::expandLifespan(RequestSpec &spec, } void TensorPool::syncDependents(const RequestSpec &spec) { + /// @note syncing dependents of dependents is invalid and will throw. auto &dependents = std::get(spec.details).dependents; for (auto &dep : dependents) { auto &dep_spec = pool.at(dep); @@ -274,7 +275,7 @@ TensorPool::RequestSpec &TensorPool::getSourceSpec(const std::string &name) { return *rs; } -void TensorPool::setExternalTensor(const std::string &name, const Tensor &t) { +void TensorPool::fillPlaceholder(const std::string &name, const Tensor &t) { auto &spec = getSourceSpec(name); auto &details = std::get(spec.details); NNTR_THROW_IF(details.lifespan != TensorLifespan::UNMANAGED, @@ -286,17 +287,11 @@ void TensorPool::setExternalTensor(const std::string &name, const Tensor &t) { NNTR_THROW_IF(t.size() != 0 && t.size() < spec.tensor->size(), std::invalid_argument) - << "Error: setting external tensor of smaller size for " << name; + << "Error: setting external tensor of smaller size for " + << spec.tensor->getName() << "(maybe view of " << name << ")"; spec.tensor->setData(t.getData()); -} - -void TensorPool::updateExternalTensors() { - for (auto &spec : pool) { - if (std::holds_alternative(spec.details)) { - syncDependents(spec); - } - } + syncDependents(spec); } Tensor *TensorPool::placeholder(const std::string &name, const TensorDim &dim) { diff --git a/nntrainer/tensor/tensor_pool.h b/nntrainer/tensor/tensor_pool.h index 81d1eab..29381eb 100644 --- a/nntrainer/tensor/tensor_pool.h +++ b/nntrainer/tensor/tensor_pool.h @@ -183,14 +183,7 @@ public: * * @note Update externally dependent tensors data ptrs from their parents */ - void setExternalTensor(const std::string &name, const Tensor &t); - - /** - * @brief Update externally dependent tensors - * - * @note Update externally dependent tensors data ptrs from their parents - */ - void updateExternalTensors(); + void fillPlaceholder(const std::string &name, const Tensor &t); /** * @brief request placeholder which will be not managed by this tensor pool diff --git a/test/unittest/unittest_nntrainer_tensor_pool.cpp b/test/unittest/unittest_nntrainer_tensor_pool.cpp index eb83767..d6c3d2d 100644 --- a/test/unittest/unittest_nntrainer_tensor_pool.cpp +++ b/test/unittest/unittest_nntrainer_tensor_pool.cpp @@ -548,8 +548,7 @@ TEST(TensorPool, view_of_placeholder_p) { /// t3 : 2 3 nntrainer::Tensor t_original(t1->getDim()); t_original.apply_i([i = 0u](float _) mutable { return ++i; }); - pool.setExternalTensor("t1", t_original); - pool.updateExternalTensors(); + pool.fillPlaceholder("t1", t_original); testSubset(t1, &t_original); testSubset(t1, t2); -- 2.7.4