From c83ba445495567440962e0c01cfc82411939917c Mon Sep 17 00:00:00 2001 From: Alejandro Saucedo Date: Wed, 10 Feb 2021 08:44:25 +0000 Subject: [PATCH] Moved destroy and rebuild functions to cpp --- src/Manager.cpp | 124 ++++++++++++++++++++++++++++++++ src/include/kompute/Manager.hpp | 114 +++-------------------------- 2 files changed, 132 insertions(+), 106 deletions(-) diff --git a/src/Manager.cpp b/src/Manager.cpp index 00e2a6e67..c66a4030b 100644 --- a/src/Manager.cpp +++ b/src/Manager.cpp @@ -350,5 +350,129 @@ Manager::tensor( return tensor; } +void +Manager::rebuild(std::vector> tensors, + bool syncDataToGPU) +{ + SPDLOG_DEBUG("Kompute Manager rebuild triggered"); + for (std::shared_ptr tensor : tensors) { + + // False syncData to run all tensors at once instead one by one + this->rebuild(tensor, false); + } + + if (syncDataToGPU) { + this->evalOpDefault(tensors); + } +} + +void +Manager::rebuild(std::shared_ptr tensor, + bool syncDataToGPU) +{ + SPDLOG_DEBUG("Kompute Manager rebuild Tensor triggered"); + + if (tensor->isInit()) { + tensor->freeMemoryDestroyGPUResources(); + } + + tensor->init(this->mPhysicalDevice, this->mDevice); + + std::set>::iterator it = + this->mManagedTensors.find(tensor); + if (it == this->mManagedTensors.end()) { + this->mManagedTensors.insert(tensor); + } + + if (syncDataToGPU) { + this->evalOpDefault({ tensor }); + } +} + +void +Manager::destroy(std::shared_ptr tensor) +{ + SPDLOG_DEBUG("Kompute Manager rebuild Tensor triggered"); + + if (tensor->isInit()) { + tensor->freeMemoryDestroyGPUResources(); + } + + // TODO: Confirm not limiting destroying tensors owned by this manager allowed + std::set>::iterator it = + this->mManagedTensors.find(tensor); + + if (it != this->mManagedTensors.end()) { + this->mManagedTensors.erase(tensor); + } +} + +void +Manager::destroy(std::vector> tensors) +{ + SPDLOG_DEBUG("Kompute Manager rebuild Tensor triggered"); + + for (std::shared_ptr tensor : tensors) { + this->destroy(tensor); + } +} + +void +Manager::destroy(std::vector> sequences) +{ + SPDLOG_DEBUG("Kompute Manager rebuild Sequence triggered"); + + for (std::shared_ptr sequence : sequences) { + this->destroy(sequence); + } +} + +void +Manager::destroy(std::shared_ptr sequence) +{ + SPDLOG_DEBUG("Kompute Manager rebuild Sequence triggered"); + + // Inefficient but required to delete by value + // Depending on the amount of named sequences created may be worth creating + // a set to ensure efficient delete. + for (std::unordered_map>::iterator it = this->mManagedSequences.begin(); it != this->mManagedSequences.end(); it++) { + if (it->second == sequence) { + this->mManagedSequences.erase(it); + break; + } + } + + if (sequence->isInit()) { + sequence->freeMemoryDestroyGPUResources(); + } +} + +void +Manager::destroy(const std::string& sequenceName) +{ + SPDLOG_DEBUG("Kompute Manager rebuild Sequence triggered"); + + std::unordered_map>::iterator + found = this->mManagedSequences.find(sequenceName); + + if (found != this->mManagedSequences.end()) { + // We don't call destroy(sequence) as erasing sequence by name more efficient + if (found->second->isInit()) { + found->second->freeMemoryDestroyGPUResources(); + } + this->mManagedSequences.erase(sequenceName); + } +} + +void +Manager::destroy(const std::vector& sequenceNames) +{ + SPDLOG_DEBUG("Kompute Manager rebuild Sequence triggered"); + + for (const std::string& sequenceName : sequenceNames) { + this->destroy(sequenceName); + } +} + } diff --git a/src/include/kompute/Manager.hpp b/src/include/kompute/Manager.hpp index 3019569c5..f13a45523 100644 --- a/src/include/kompute/Manager.hpp +++ b/src/include/kompute/Manager.hpp @@ -238,19 +238,7 @@ class Manager * @param syncDataToGPU Whether to sync the data to GPU memory */ void rebuild(std::vector> tensors, - bool syncDataToGPU = true) - { - SPDLOG_DEBUG("Kompute Manager rebuild triggered"); - for (std::shared_ptr tensor : tensors) { - - // False syncData to run all tensors at once instead one by one - this->rebuild(tensor, false); - } - - if (syncDataToGPU) { - this->evalOpDefault(tensors); - } - } + bool syncDataToGPU = true); /** * Function that simplifies the common workflow of tensor initialisation. It @@ -262,26 +250,7 @@ class Manager * @param syncDataToGPU Whether to sync the data to GPU memory */ void rebuild(std::shared_ptr tensor, - bool syncDataToGPU = true) - { - SPDLOG_DEBUG("Kompute Manager rebuild Tensor triggered"); - - if (tensor->isInit()) { - tensor->freeMemoryDestroyGPUResources(); - } - - tensor->init(this->mPhysicalDevice, this->mDevice); - - std::set>::iterator it = - this->mManagedTensors.find(tensor); - if (it == this->mManagedTensors.end()) { - this->mManagedTensors.insert(tensor); - } - - if (syncDataToGPU) { - this->evalOpDefault({ tensor }); - } - } + bool syncDataToGPU = true); /** * Destroy owned Vulkan GPU resources and free GPU memory for @@ -289,22 +258,7 @@ class Manager * * @param tensors Single tensor to rebuild */ - void destroy(std::shared_ptr tensor) - { - SPDLOG_DEBUG("Kompute Manager rebuild Tensor triggered"); - - if (tensor->isInit()) { - tensor->freeMemoryDestroyGPUResources(); - } - - // TODO: Confirm not limiting destroying tensors owned by this manager allowed - std::set>::iterator it = - this->mManagedTensors.find(tensor); - - if (it != this->mManagedTensors.end()) { - this->mManagedTensors.erase(tensor); - } - } + void destroy(std::shared_ptr tensor); /** * Destroy owned Vulkan GPU resources and free GPU memory for @@ -312,14 +266,7 @@ class Manager * * @param tensors Single tensor to rebuild */ - void destroy(std::vector> tensors) - { - SPDLOG_DEBUG("Kompute Manager rebuild Tensor triggered"); - - for (std::shared_ptr tensor : tensors) { - this->destroy(tensor); - } - } + void destroy(std::vector> tensors); /** * Destroy owned Vulkan GPU resources and free GPU memory for @@ -328,14 +275,7 @@ class Manager * * @param sequences Vector for shared ptrs with sequences to destroy */ - void destroy(std::vector> sequences) - { - SPDLOG_DEBUG("Kompute Manager rebuild Sequence triggered"); - - for (std::shared_ptr sequence : sequences) { - this->destroy(sequence); - } - } + void destroy(std::vector> sequences); /** * Destroy owned Vulkan GPU resources and free GPU memory for @@ -344,24 +284,7 @@ class Manager * * @param sequences Single sequence to rebuild */ - void destroy(std::shared_ptr sequence) - { - SPDLOG_DEBUG("Kompute Manager rebuild Sequence triggered"); - - // Inefficient but required to delete by value - // Depending on the amount of named sequences created may be worth creating - // a set to ensure efficient delete. - for (std::unordered_map>::iterator it = this->mManagedSequences.begin(); it != this->mManagedSequences.end(); it++) { - if (it->second == sequence) { - this->mManagedSequences.erase(it); - break; - } - } - - if (sequence->isInit()) { - sequence->freeMemoryDestroyGPUResources(); - } - } + void destroy(std::shared_ptr sequence); /** * Destroy owned Vulkan GPU resources and free GPU memory for @@ -369,21 +292,7 @@ class Manager * * @param sequenceName Single name of named sequence to destroy */ - void destroy(const std::string& sequenceName) - { - SPDLOG_DEBUG("Kompute Manager rebuild Sequence triggered"); - - std::unordered_map>::iterator - found = this->mManagedSequences.find(sequenceName); - - if (found != this->mManagedSequences.end()) { - // We don't call destroy(sequence) as erasing sequence by name more efficient - if (found->second->isInit()) { - found->second->freeMemoryDestroyGPUResources(); - } - this->mManagedSequences.erase(sequenceName); - } - } + void destroy(const std::string& sequenceName); /** * Destroy owned Vulkan GPU resources and free GPU memory for @@ -391,14 +300,7 @@ class Manager * * @param sequenceName Vector of sequence names to destroy */ - void destroy(const std::vector& sequenceNames) - { - SPDLOG_DEBUG("Kompute Manager rebuild Sequence triggered"); - - for (const std::string& sequenceName : sequenceNames) { - this->destroy(sequenceName); - } - } + void destroy(const std::vector& sequenceNames); private: // -------------- OPTIONALLY OWNED RESOURCES