summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2020-06-19 12:13:29 +0000
committerGeir Storli <geirst@verizonmedia.com>2020-06-19 12:13:29 +0000
commitc56ffa5e2735b6e3873aa18edc5e54a9128f3108 (patch)
treeb64c3bbc9cee9bd5b0900bfe51cac5a4686c08f6
parentcdc65c6b2b0734fb97b7f466ba0139ce6406559c (diff)
Wire flag to enable multi-threaded indexing for a hnsw index.
-rw-r--r--searchcommon/src/vespa/searchcommon/attribute/hnsw_index_params.h10
-rw-r--r--searchcore/src/tests/proton/attribute/attribute_test.cpp8
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp2
-rw-r--r--searchlib/src/tests/attribute/attributemanager/attributemanager_test.cpp9
-rw-r--r--searchlib/src/vespa/searchlib/attribute/configconverter.cpp2
5 files changed, 17 insertions, 14 deletions
diff --git a/searchcommon/src/vespa/searchcommon/attribute/hnsw_index_params.h b/searchcommon/src/vespa/searchcommon/attribute/hnsw_index_params.h
index c8b196023d6..5f974f509c6 100644
--- a/searchcommon/src/vespa/searchcommon/attribute/hnsw_index_params.h
+++ b/searchcommon/src/vespa/searchcommon/attribute/hnsw_index_params.h
@@ -16,29 +16,29 @@ private:
uint32_t _neighbors_to_explore_at_insert;
// This is always the same as in the attribute config, and is duplicated here to simplify usage.
DistanceMetric _distance_metric;
- bool _allow_multi_threaded_indexing;
+ bool _multi_threaded_indexing;
public:
HnswIndexParams(uint32_t max_links_per_node_in,
uint32_t neighbors_to_explore_at_insert_in,
DistanceMetric distance_metric_in,
- bool allow_multi_threaded_indexing_in = false)
+ bool multi_threaded_indexing_in = false)
: _max_links_per_node(max_links_per_node_in),
_neighbors_to_explore_at_insert(neighbors_to_explore_at_insert_in),
_distance_metric(distance_metric_in),
- _allow_multi_threaded_indexing(allow_multi_threaded_indexing_in)
+ _multi_threaded_indexing(multi_threaded_indexing_in)
{}
uint32_t max_links_per_node() const { return _max_links_per_node; }
uint32_t neighbors_to_explore_at_insert() const { return _neighbors_to_explore_at_insert; }
DistanceMetric distance_metric() const { return _distance_metric; }
- bool allow_multi_threaded_indexing() const { return _allow_multi_threaded_indexing; }
+ bool multi_threaded_indexing() const { return _multi_threaded_indexing; }
bool operator==(const HnswIndexParams& rhs) const {
return (_max_links_per_node == rhs._max_links_per_node &&
_neighbors_to_explore_at_insert == rhs._neighbors_to_explore_at_insert &&
_distance_metric == rhs._distance_metric &&
- _allow_multi_threaded_indexing == rhs._allow_multi_threaded_indexing);
+ _multi_threaded_indexing == rhs._multi_threaded_indexing);
}
};
diff --git a/searchcore/src/tests/proton/attribute/attribute_test.cpp b/searchcore/src/tests/proton/attribute/attribute_test.cpp
index 91f580cd221..dabab649497 100644
--- a/searchcore/src/tests/proton/attribute/attribute_test.cpp
+++ b/searchcore/src/tests/proton/attribute/attribute_test.cpp
@@ -811,18 +811,18 @@ public:
const vespalib::string dense_tensor = "tensor(x[2])";
AVConfig
-get_tensor_config(bool allow_multi_threaded_indexing)
+get_tensor_config(bool multi_threaded_indexing)
{
AVConfig cfg(AVBasicType::TENSOR);
cfg.setTensorType(ValueType::from_spec(dense_tensor));
- cfg.set_hnsw_index_params(HnswIndexParams(4, 4, DistanceMetric::Euclidean, allow_multi_threaded_indexing));
+ cfg.set_hnsw_index_params(HnswIndexParams(4, 4, DistanceMetric::Euclidean, multi_threaded_indexing));
return cfg;
}
std::shared_ptr<MockDenseTensorAttribute>
-make_mock_tensor_attribute(const vespalib::string& name, bool allow_multi_threaded_indexing)
+make_mock_tensor_attribute(const vespalib::string& name, bool multi_threaded_indexing)
{
- auto cfg = get_tensor_config(allow_multi_threaded_indexing);
+ auto cfg = get_tensor_config(multi_threaded_indexing);
return std::make_shared<MockDenseTensorAttribute>(name, cfg);
}
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp
index 8f19d5c203b..9b54ae816e0 100644
--- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp
+++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp
@@ -40,7 +40,7 @@ use_two_phase_put_for_attribute(const AttributeVector& attr)
const auto& cfg = attr.getConfig();
if (cfg.basicType() == search::attribute::BasicType::Type::TENSOR &&
cfg.hnsw_index_params().has_value() &&
- cfg.hnsw_index_params().value().allow_multi_threaded_indexing())
+ cfg.hnsw_index_params().value().multi_threaded_indexing())
{
return true;
}
diff --git a/searchlib/src/tests/attribute/attributemanager/attributemanager_test.cpp b/searchlib/src/tests/attribute/attributemanager/attributemanager_test.cpp
index 3728b87c6df..b94186626c2 100644
--- a/searchlib/src/tests/attribute/attributemanager/attributemanager_test.cpp
+++ b/searchlib/src/tests/attribute/attributemanager/attributemanager_test.cpp
@@ -297,11 +297,14 @@ AttributeManagerTest::testConfigConvert()
a.index.hnsw.enabled = true;
a.index.hnsw.maxlinkspernode = 32;
a.index.hnsw.neighborstoexploreatinsert = 300;
+ a.index.hnsw.multithreadedindexing = true;
auto out = ConfigConverter::convert(a);
EXPECT_TRUE(out.hnsw_index_params().has_value());
- EXPECT_EQUAL(32u, out.hnsw_index_params().value().max_links_per_node());
- EXPECT_EQUAL(300u, out.hnsw_index_params().value().neighbors_to_explore_at_insert());
- EXPECT_TRUE(out.hnsw_index_params().value().distance_metric() == dm_out);
+ const auto& params = out.hnsw_index_params().value();
+ EXPECT_EQUAL(32u, params.max_links_per_node());
+ EXPECT_EQUAL(300u, params.neighbors_to_explore_at_insert());
+ EXPECT_TRUE(params.distance_metric() == dm_out);
+ EXPECT_TRUE(params.multi_threaded_indexing());
}
{ // hnsw index params (disabled)
CACA a;
diff --git a/searchlib/src/vespa/searchlib/attribute/configconverter.cpp b/searchlib/src/vespa/searchlib/attribute/configconverter.cpp
index f6c39b9570d..f435f79bf65 100644
--- a/searchlib/src/vespa/searchlib/attribute/configconverter.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/configconverter.cpp
@@ -90,7 +90,7 @@ ConfigConverter::convert(const AttributesConfig::Attribute & cfg)
if (cfg.index.hnsw.enabled) {
retval.set_hnsw_index_params(HnswIndexParams(cfg.index.hnsw.maxlinkspernode,
cfg.index.hnsw.neighborstoexploreatinsert,
- dm));
+ dm, cfg.index.hnsw.multithreadedindexing));
}
if (retval.basicType().type() == BasicType::Type::TENSOR) {
if (!cfg.tensortype.empty()) {