diff --git a/src/VecSim/vec_sim.cpp b/src/VecSim/vec_sim.cpp index 2ad8f94f7..213563429 100644 --- a/src/VecSim/vec_sim.cpp +++ b/src/VecSim/vec_sim.cpp @@ -27,6 +27,10 @@ extern "C" void VecSim_SetLogCallbackFunction(logCallbackFunction callback) { extern "C" void VecSim_SetWriteMode(VecSimWriteMode mode) { VecSimIndex::setWriteMode(mode); } +extern "C" void VecSim_SetNumThreads(size_t new_num_threads) { + VecSimIndex::setNumThreads(new_num_threads); +} + static VecSimResolveCode _ResolveParams_EFRuntime(VecSimAlgo index_type, VecSimRawParam rparam, VecSimQueryParams *qparams, VecsimQueryType query_type) { diff --git a/src/VecSim/vec_sim.h b/src/VecSim/vec_sim.h index 56110a900..cb61f8c4e 100644 --- a/src/VecSim/vec_sim.h +++ b/src/VecSim/vec_sim.h @@ -259,6 +259,12 @@ void VecSim_SetTestLogContext(const char *test_name, const char *test_type); */ void VecSim_SetWriteMode(VecSimWriteMode mode); +/** + * num_threads: new threads + * TODO: is 0 allowed + */ +void VecSim_SetNumThreads(size_t new_num_threads); + #ifdef __cplusplus } #endif diff --git a/src/VecSim/vec_sim_interface.h b/src/VecSim/vec_sim_interface.h index 4066e3e6c..dcdfd8f7b 100644 --- a/src/VecSim/vec_sim_interface.h +++ b/src/VecSim/vec_sim_interface.h @@ -215,6 +215,12 @@ struct VecSimIndexInterface : public VecsimBaseObject { inline static void setWriteMode(VecSimWriteMode mode) { VecSimIndexInterface::asyncWriteMode = mode; } + + inline static void setNumThreads(size_t new_num_threads) { + + // iterate all registered thpools and update their num_threads + VecSimThreadPool::setNumThreads(new_num_threads); + } #ifdef BUILD_TESTS virtual void fitMemory() = 0; #endif diff --git a/tests/unit/test_svs.cpp b/tests/unit/test_svs.cpp index 21b7610f4..0d9c09bb6 100644 --- a/tests/unit/test_svs.cpp +++ b/tests/unit/test_svs.cpp @@ -143,6 +143,30 @@ TYPED_TEST(SVSTest, svs_vector_add_test) { VecSimIndex_Free(index); } +TYPED_TEST(SVSTest, svs_miltiple_indexes) { + + size_t dim = 4; + + SVSParams params = { + .dim = dim, + .metric = VecSimMetric_IP, + /* SVS-Vamana specifics */ + .alpha = 1.2, + .graph_max_degree = 64, + .construction_window_size = 20, + .max_candidate_pool_size = 1024, + .prune_to = 60, + .use_search_history = VecSimOption_ENABLE, + }; + + VecSimIndex *index = this->CreateNewIndex(params); + ASSERT_INDEX(index); + VecSimIndex *index2 = this->CreateNewIndex(params); + ASSERT_INDEX(index2); + + VecSimIndex_Free(index); + VecSimIndex_Free(index2); +} TYPED_TEST(SVSTest, svs_vector_update_test) { size_t dim = 4;