From 9899cfefb76d8d92bb80fb70d4dce14d48160113 Mon Sep 17 00:00:00 2001 From: Jin Hai Date: Thu, 5 Mar 2020 11:23:36 +0800 Subject: [PATCH] #1475 add debug timing for map uids (#1513) Signed-off-by: yudong.cai --- core/src/db/engine/ExecutionEngineImpl.cpp | 51 ++++++++++------------ 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/core/src/db/engine/ExecutionEngineImpl.cpp b/core/src/db/engine/ExecutionEngineImpl.cpp index 6b817a97..c9243075 100644 --- a/core/src/db/engine/ExecutionEngineImpl.cpp +++ b/core/src/db/engine/ExecutionEngineImpl.cpp @@ -741,6 +741,17 @@ ExecutionEngineImpl::BuildIndex(const std::string& location, EngineType engine_t return std::make_shared(to_index, location, engine_type, metric_type_, nlist_); } +// map offsets to ids +void +MapUids(const std::vector& uids, int64_t* labels, size_t num) { + for (int64_t i = 0; i < num; ++i) { + int64_t& offset = labels[i]; + if (offset != -1) { + offset = uids[offset]; + } + } +} + Status ExecutionEngineImpl::Search(int64_t n, const float* data, int64_t k, int64_t nprobe, float* distances, int64_t* labels, bool hybrid) { @@ -798,14 +809,14 @@ ExecutionEngineImpl::Search(int64_t n, const float* data, int64_t k, int64_t npr } } #endif - TimeRecorder rc("ExecutionEngineImpl::Search"); + TimeRecorder rc("ExecutionEngineImpl::Search float"); if (index_ == nullptr) { ENGINE_LOG_ERROR << "ExecutionEngineImpl: index is null, failed to search"; return Status(DB_ERROR, "index is null"); } - ENGINE_LOG_DEBUG << "Search Params: [k] " << k << " [nprobe] " << nprobe; + ENGINE_LOG_DEBUG << "Search Params: [k] " << k << " [nprobe] " << nprobe; // TODO(linxj): remove here. Get conf from function TempMetaConf temp_conf; @@ -824,15 +835,9 @@ ExecutionEngineImpl::Search(int64_t n, const float* data, int64_t k, int64_t npr rc.RecordSection("search done"); // map offsets to ids - const std::vector& uids = index_->GetUids(); - for (int64_t i = 0; i < n * k; i++) { - int64_t offset = labels[i]; - if (offset != -1) { - labels[i] = uids[offset]; - } - } + MapUids(index_->GetUids(), labels, n * k); - rc.RecordSection("map uids"); + rc.RecordSection("map uids " + std::to_string(n * k)); if (hybrid) { HybridUnset(); @@ -847,7 +852,7 @@ ExecutionEngineImpl::Search(int64_t n, const float* data, int64_t k, int64_t npr Status ExecutionEngineImpl::Search(int64_t n, const uint8_t* data, int64_t k, int64_t nprobe, float* distances, int64_t* labels, bool hybrid) { - TimeRecorder rc("ExecutionEngineImpl::Search"); + TimeRecorder rc("ExecutionEngineImpl::Search uint8"); if (index_ == nullptr) { ENGINE_LOG_ERROR << "ExecutionEngineImpl: index is null, failed to search"; @@ -873,15 +878,9 @@ ExecutionEngineImpl::Search(int64_t n, const uint8_t* data, int64_t k, int64_t n rc.RecordSection("search done"); // map offsets to ids - const std::vector& uids = index_->GetUids(); - for (int64_t i = 0; i < n * k; i++) { - int64_t offset = labels[i]; - if (offset != -1) { - labels[i] = uids[offset]; - } - } + MapUids(index_->GetUids(), labels, n * k); - rc.RecordSection("map uids"); + rc.RecordSection("map uids " + std::to_string(n * k)); if (hybrid) { HybridUnset(); @@ -896,7 +895,7 @@ ExecutionEngineImpl::Search(int64_t n, const uint8_t* data, int64_t k, int64_t n Status ExecutionEngineImpl::Search(int64_t n, const std::vector& ids, int64_t k, int64_t nprobe, float* distances, int64_t* labels, bool hybrid) { - TimeRecorder rc("ExecutionEngineImpl::Search"); + TimeRecorder rc("ExecutionEngineImpl::Search vector of ids"); if (index_ == nullptr) { ENGINE_LOG_ERROR << "ExecutionEngineImpl: index is null, failed to search"; @@ -961,16 +960,12 @@ ExecutionEngineImpl::Search(int64_t n, const std::vector& ids, int64_t auto status = Status::OK(); if (!offsets.empty()) { status = index_->SearchById(offsets.size(), offsets.data(), distances, labels, conf); - rc.RecordSection("search by id done"); + rc.RecordSection("search done"); // map offsets to ids - for (int64_t i = 0; i < offsets.size() * k; i++) { - int64_t offset = labels[i]; - if (offset != -1) { - labels[i] = uids[offset]; - } - } - rc.RecordSection("map uids"); + MapUids(uids, labels, offsets.size() * k); + + rc.RecordSection("map uids " + std::to_string(offsets.size() * k)); } if (hybrid) { -- GitLab