From d2aa02084debb618e7f18a6ed250ab72a697d098 Mon Sep 17 00:00:00 2001 From: starlord Date: Tue, 6 Aug 2019 17:31:43 +0800 Subject: [PATCH 1/2] MS-312 Set openmp thread number by config Former-commit-id: 6ef7343aa6b908e6cd319271d4c60a49789eaf03 --- cpp/CHANGELOG.md | 1 + cpp/conf/server_config.template | 3 ++- cpp/src/server/DBWrapper.cpp | 14 ++++++++++++++ cpp/src/server/ServerConfig.h | 1 + 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/cpp/CHANGELOG.md b/cpp/CHANGELOG.md index 6e5fcc2c96..5c5d7ccb0c 100644 --- a/cpp/CHANGELOG.md +++ b/cpp/CHANGELOG.md @@ -40,6 +40,7 @@ Please mark all change in change log and use the ticket from JIRA. - MS-266 - Improve topk reduce time by using multi-threads - MS-275 - Avoid sqlite logic error excetion - MS-278 - add IndexStatsHelper +- MS-312 - Set openmp thread number by config ## New Feature - MS-180 - Add new mem manager diff --git a/cpp/conf/server_config.template b/cpp/conf/server_config.template index ff5cfc6cd5..ec88b28c0a 100644 --- a/cpp/conf/server_config.template +++ b/cpp/conf/server_config.template @@ -43,4 +43,5 @@ engine_config: nprobe: 10 nlist: 16384 use_blas_threshold: 20 - metric_type: L2 # compare vectors by euclidean distance(L2) or inner product(IP), optional: L2 or IP + metric_type: L2 # compare vectors by euclidean distance(L2) or inner product(IP), optional: L2 or IP + omp_thread_occupancy: 0.75 # how many compute threads be used, this is a percent value compare to system cpu core number(for instance: cpu core is 4, then 0.75 means use 3 compute threads) diff --git a/cpp/src/server/DBWrapper.cpp b/cpp/src/server/DBWrapper.cpp index e908f62d7c..b4c89ed87d 100644 --- a/cpp/src/server/DBWrapper.cpp +++ b/cpp/src/server/DBWrapper.cpp @@ -10,11 +10,14 @@ #include "utils/Log.h" #include "utils/StringHelpFunctions.h" +#include + namespace zilliz { namespace milvus { namespace server { DBWrapper::DBWrapper() { + //db config zilliz::milvus::engine::Options opt; ConfigNode& db_config = ServerConfig::GetInstance().GetConfig(CONFIG_DB); opt.meta.backend_uri = db_config.GetValue(CONFIG_DB_URL); @@ -37,6 +40,7 @@ DBWrapper::DBWrapper() { kill(0, SIGUSR1); } + // cache config ConfigNode& cache_config = ServerConfig::GetInstance().GetConfig(CONFIG_CACHE); opt.insert_cache_immediately_ = cache_config.GetBoolValue(CONFIG_INSERT_CACHE_IMMEDIATELY, false); @@ -56,6 +60,16 @@ DBWrapper::DBWrapper() { kill(0, SIGUSR1); } + // engine config + ConfigNode& engine_config = ServerConfig::GetInstance().GetConfig(CONFIG_ENGINE); + float omp_thread_rate = engine_config.GetFloatValue(CONFIG_OMP_THREAD_RATE, 0.75); + uint32_t cpu_count = 1; + CommonUtil::GetSystemAvailableThreads(cpu_count); + float thread_count = omp_thread_rate*(float)cpu_count; + int32_t omp_thread = (int32_t)round(thread_count); + omp_set_num_threads(omp_thread); + SERVER_LOG_DEBUG << "Openmp thread number = " << omp_thread; + //set archive config engine::ArchiveConf::CriteriaT criterial; int64_t disk = db_config.GetInt64Value(CONFIG_DB_ARCHIVE_DISK, 0); diff --git a/cpp/src/server/ServerConfig.h b/cpp/src/server/ServerConfig.h index bb7d5d3669..48e44fc4e6 100644 --- a/cpp/src/server/ServerConfig.h +++ b/cpp/src/server/ServerConfig.h @@ -53,6 +53,7 @@ static const std::string CONFIG_NPROBE = "nprobe"; static const std::string CONFIG_NLIST = "nlist"; static const std::string CONFIG_DCBT = "use_blas_threshold"; static const std::string CONFIG_METRICTYPE = "metric_type"; +static const std::string CONFIG_OMP_THREAD_RATE = "omp_thread_occupancy"; class ServerConfig { public: From 1b0dd8ee90f0ba8d345888d4de8435e6f74d2ebf Mon Sep 17 00:00:00 2001 From: starlord Date: Tue, 6 Aug 2019 17:42:35 +0800 Subject: [PATCH 2/2] MS-312 Set openmp thread number by config Former-commit-id: 7ddafa3aa22d0455b343d07cc37b1a30d1ac29a1 --- cpp/conf/server_config.template | 2 +- cpp/src/server/DBWrapper.cpp | 12 +++++------- cpp/src/server/ServerConfig.h | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/cpp/conf/server_config.template b/cpp/conf/server_config.template index ec88b28c0a..11eb9f9eeb 100644 --- a/cpp/conf/server_config.template +++ b/cpp/conf/server_config.template @@ -44,4 +44,4 @@ engine_config: nlist: 16384 use_blas_threshold: 20 metric_type: L2 # compare vectors by euclidean distance(L2) or inner product(IP), optional: L2 or IP - omp_thread_occupancy: 0.75 # how many compute threads be used, this is a percent value compare to system cpu core number(for instance: cpu core is 4, then 0.75 means use 3 compute threads) + omp_thread_num: 0 # how many compute threads be used by engine, 0 means use all cpu core to compute diff --git a/cpp/src/server/DBWrapper.cpp b/cpp/src/server/DBWrapper.cpp index b4c89ed87d..4487a37e19 100644 --- a/cpp/src/server/DBWrapper.cpp +++ b/cpp/src/server/DBWrapper.cpp @@ -62,13 +62,11 @@ DBWrapper::DBWrapper() { // engine config ConfigNode& engine_config = ServerConfig::GetInstance().GetConfig(CONFIG_ENGINE); - float omp_thread_rate = engine_config.GetFloatValue(CONFIG_OMP_THREAD_RATE, 0.75); - uint32_t cpu_count = 1; - CommonUtil::GetSystemAvailableThreads(cpu_count); - float thread_count = omp_thread_rate*(float)cpu_count; - int32_t omp_thread = (int32_t)round(thread_count); - omp_set_num_threads(omp_thread); - SERVER_LOG_DEBUG << "Openmp thread number = " << omp_thread; + int32_t omp_thread = engine_config.GetInt32Value(CONFIG_OMP_THREAD_NUM, 0); + if(omp_thread > 0) { + omp_set_num_threads(omp_thread); + SERVER_LOG_DEBUG << "Specify openmp thread number: " << omp_thread; + } //set archive config engine::ArchiveConf::CriteriaT criterial; diff --git a/cpp/src/server/ServerConfig.h b/cpp/src/server/ServerConfig.h index 48e44fc4e6..e899d1f8d6 100644 --- a/cpp/src/server/ServerConfig.h +++ b/cpp/src/server/ServerConfig.h @@ -53,7 +53,7 @@ static const std::string CONFIG_NPROBE = "nprobe"; static const std::string CONFIG_NLIST = "nlist"; static const std::string CONFIG_DCBT = "use_blas_threshold"; static const std::string CONFIG_METRICTYPE = "metric_type"; -static const std::string CONFIG_OMP_THREAD_RATE = "omp_thread_occupancy"; +static const std::string CONFIG_OMP_THREAD_NUM = "omp_thread_num"; class ServerConfig { public: