[Tpool] Remove updateExternalTensor
authorJihoon Lee <jhoon.it.lee@samsung.com>
Fri, 5 Nov 2021 07:36:06 +0000 (16:36 +0900)
committerJijoong Moon <jijoong.moon@samsung.com>
Tue, 16 Nov 2021 07:46:20 +0000 (16:46 +0900)
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 <jhoon.it.lee@samsung.com>
nntrainer/graph/network_graph.cpp
nntrainer/tensor/manager.h
nntrainer/tensor/tensor_pool.cpp
nntrainer/tensor/tensor_pool.h
test/unittest/unittest_nntrainer_tensor_pool.cpp

index cb97668..66826c3 100644 (file)
@@ -1064,11 +1064,11 @@ void NetworkGraph::setExternalTensors(const std::vector<Tensor> &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<Tensor> &inputs,
 
   setExternalTensors(inputs, input_list);
   setExternalTensors(labels, label_list);
-  tensor_manager->updateExternalTensors();
 }
 
 void NetworkGraph::setInputsLabels(sharedConstTensors &inputs,
index 8776f2f..8749305 100644 (file)
@@ -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);
   }
 
   /**
index f4f58c3..65cf401 100644 (file)
@@ -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<SourceDetails>(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<SourceDetails>(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<SourceDetails>(spec.details)) {
-      syncDependents(spec);
-    }
-  }
+  syncDependents(spec);
 }
 
 Tensor *TensorPool::placeholder(const std::string &name, const TensorDim &dim) {
index 81d1eab..29381eb 100644 (file)
@@ -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
index eb83767..d6c3d2d 100644 (file)
@@ -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);