diff --git a/cpp/CHANGELOG.md b/cpp/CHANGELOG.md index 27c2a4c13495db3ce9566aa1a69d4a1774ff1995..6f1c49e9f4cbc8b92a5094c4d444f766f7a3f33e 100644 --- a/cpp/CHANGELOG.md +++ b/cpp/CHANGELOG.md @@ -15,6 +15,7 @@ Please mark all change in change log and use the ticket from JIRA. - MS-348 - Add ResourceFactory Test - MS-350 - Remove knowhere submodule - MS-354 - Add task class and interface in scheduler +- MS-355 - Add copy interface in ExcutionEngine ## New Feature - MS-343 - Implement ResourceMgr diff --git a/cpp/src/db/engine/ExecutionEngine.h b/cpp/src/db/engine/ExecutionEngine.h index 5871be7f57b986ae90d841558fddf75eed887a38..a122231a1dce46638a88e5e6fa2ed1e60fc9602f 100644 --- a/cpp/src/db/engine/ExecutionEngine.h +++ b/cpp/src/db/engine/ExecutionEngine.h @@ -42,6 +42,10 @@ public: virtual Status Load(bool to_cache = true) = 0; + virtual Status CopyToGpu(uint64_t device_id) = 0; + + virtual Status CopyToCpu() = 0; + virtual Status Merge(const std::string& location) = 0; virtual Status Search(long n, diff --git a/cpp/src/db/engine/ExecutionEngineImpl.cpp b/cpp/src/db/engine/ExecutionEngineImpl.cpp index 21878377e66010c5c97ff7bd22a453035df790e6..037c52cf5cc7c7e557ebbb9be3a3a2e86a05782a 100644 --- a/cpp/src/db/engine/ExecutionEngineImpl.cpp +++ b/cpp/src/db/engine/ExecutionEngineImpl.cpp @@ -143,6 +143,32 @@ Status ExecutionEngineImpl::Load(bool to_cache) { return Status::OK(); } +Status ExecutionEngineImpl::CopyToGpu(uint64_t device_id) { + try { + index_ = index_->CopyToGpu(device_id); + ENGINE_LOG_DEBUG << "CPU to GPU" << device_id; + } catch (knowhere::KnowhereException &e) { + ENGINE_LOG_ERROR << e.what(); + return Status::Error(e.what()); + } catch (std::exception &e) { + return Status::Error(e.what()); + } + return Status::OK(); +} + +Status ExecutionEngineImpl::CopyToCpu() { + try { + index_ = index_->CopyToCpu(); + ENGINE_LOG_DEBUG << "GPU to CPU"; + } catch (knowhere::KnowhereException &e) { + ENGINE_LOG_ERROR << e.what(); + return Status::Error(e.what()); + } catch (std::exception &e) { + return Status::Error(e.what()); + } + return Status::OK(); +} + Status ExecutionEngineImpl::Merge(const std::string &location) { if (location == location_) { return Status::Error("Cannot Merge Self"); diff --git a/cpp/src/db/engine/ExecutionEngineImpl.h b/cpp/src/db/engine/ExecutionEngineImpl.h index 12579d7c5dab2d82bd1d3aae748af285788651ec..cb50af238b68bf57bdd55989995418c3d844d22e 100644 --- a/cpp/src/db/engine/ExecutionEngineImpl.h +++ b/cpp/src/db/engine/ExecutionEngineImpl.h @@ -18,7 +18,7 @@ namespace engine { class ExecutionEngineImpl : public ExecutionEngine { - public: +public: ExecutionEngineImpl(uint16_t dimension, const std::string &location, @@ -42,6 +42,10 @@ class ExecutionEngineImpl : public ExecutionEngine { Status Load(bool to_cache) override; + Status CopyToGpu(uint64_t device_id) override; + + Status CopyToCpu() override; + Status Merge(const std::string &location) override; Status Search(long n, @@ -56,12 +60,12 @@ class ExecutionEngineImpl : public ExecutionEngine { Status Init() override; - private: +private: VecIndexPtr CreatetVecIndex(EngineType type); VecIndexPtr Load(const std::string &location); - protected: +protected: VecIndexPtr index_ = nullptr; EngineType build_type; EngineType current_type;