diff options
author | Håvard Pettersen <havardpe@oath.com> | 2021-01-06 14:49:48 +0000 |
---|---|---|
committer | Håvard Pettersen <havardpe@oath.com> | 2021-01-11 11:08:19 +0000 |
commit | 32292572be63bf1725d34e4c071cd6690ecd43e8 (patch) | |
tree | 2306a12514572cfa6323a92ad120d5d8d5c69b60 /searchlib/src | |
parent | 381e20b7609eb6557168425089a6a5c948c50554 (diff) |
add string_id and simplify multi-handle container
add more testing
static instance instead of lazy singleton
use logging for leak detection
drop label_t type alias
Diffstat (limited to 'searchlib/src')
-rw-r--r-- | searchlib/src/vespa/searchlib/tensor/streamed_value_store.cpp | 32 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/tensor/streamed_value_store.h | 2 |
2 files changed, 17 insertions, 17 deletions
diff --git a/searchlib/src/vespa/searchlib/tensor/streamed_value_store.cpp b/searchlib/src/vespa/searchlib/tensor/streamed_value_store.cpp index ef4b711b86f..ce0f7992144 100644 --- a/searchlib/src/vespa/searchlib/tensor/streamed_value_store.cpp +++ b/searchlib/src/vespa/searchlib/tensor/streamed_value_store.cpp @@ -19,6 +19,7 @@ using vespalib::datastore::EntryRef; using namespace vespalib::eval; using vespalib::ConstArrayRef; using vespalib::MemoryUsage; +using vespalib::string_id; namespace search::tensor { @@ -29,10 +30,10 @@ namespace { template <typename CT, typename F> void each_subspace(const Value &value, size_t num_mapped, size_t dense_size, F f) { size_t subspace; - std::vector<label_t> addr(num_mapped); - std::vector<label_t*> refs; + std::vector<string_id> addr(num_mapped); + std::vector<string_id*> refs; refs.reserve(addr.size()); - for (label_t &label: addr) { + for (string_id &label: addr) { refs.push_back(&label); } auto cells = value.cells().typify<CT>(); @@ -40,7 +41,7 @@ void each_subspace(const Value &value, size_t num_mapped, size_t dense_size, F f view->lookup({}); while (view->next_result(refs, subspace)) { size_t offset = subspace * dense_size; - f(ConstArrayRef<label_t>(addr), ConstArrayRef<CT>(cells.begin() + offset, dense_size)); + f(ConstArrayRef<string_id>(addr), ConstArrayRef<CT>(cells.begin() + offset, dense_size)); } } @@ -54,20 +55,18 @@ struct CreateTensorEntry { } }; -using HandleView = vespalib::SharedStringRepo::HandleView; - struct MyFastValueView final : Value { const ValueType &my_type; FastValueIndex my_index; TypedCells my_cells; - MyFastValueView(const ValueType &type_ref, HandleView handle_view, TypedCells cells, size_t num_mapped, size_t num_spaces) + MyFastValueView(const ValueType &type_ref, const std::vector<string_id> &handle_view, TypedCells cells, size_t num_mapped, size_t num_spaces) : my_type(type_ref), my_index(num_mapped, handle_view, num_spaces), my_cells(cells) { - const std::vector<label_t> &labels = handle_view.handles(); + const std::vector<string_id> &labels = handle_view; for (size_t i = 0; i < num_spaces; ++i) { - ConstArrayRef<label_t> addr(&labels[i * num_mapped], num_mapped); + ConstArrayRef<string_id> addr(&labels[i * num_mapped], num_mapped); my_index.map.add_mapping(FastAddrMap::hash_labels(addr)); } assert(my_index.map.size() == num_spaces); @@ -98,13 +97,14 @@ StreamedValueStore::TensorEntry::create_shared_entry(const Value &value) template <typename CT> StreamedValueStore::TensorEntryImpl<CT>::TensorEntryImpl(const Value &value, size_t num_mapped, size_t dense_size) - : handles(num_mapped * value.index().size()), + : handles(), cells() { + handles.reserve(num_mapped * value.index().size()); cells.reserve(dense_size * value.index().size()); auto store_subspace = [&](auto addr, auto data) { - for (label_t label: addr) { - handles.add(label); + for (string_id label: addr) { + handles.push_back(label); } for (CT entry: data) { cells.push_back(entry); @@ -121,7 +121,7 @@ StreamedValueStore::TensorEntryImpl<CT>::create_fast_value_view(const ValueType size_t dense_size = type_ref.dense_subspace_size(); size_t num_spaces = cells.size() / dense_size; assert(dense_size * num_spaces == cells.size()); - assert(num_mapped * num_spaces == handles.view().handles().size()); + assert(num_mapped * num_spaces == handles.view().size()); return std::make_unique<MyFastValueView>(type_ref, handles.view(), TypedCells(cells), num_mapped, num_spaces); } @@ -133,8 +133,8 @@ StreamedValueStore::TensorEntryImpl<CT>::encode_value(const ValueType &type, ves size_t dense_size = type.dense_subspace_size(); size_t num_spaces = cells.size() / dense_size; assert(dense_size * num_spaces == cells.size()); - assert(num_mapped * num_spaces == handles.view().handles().size()); - StreamedValueView my_value(type, num_mapped, TypedCells(cells), num_spaces, handles.view().handles()); + assert(num_mapped * num_spaces == handles.view().size()); + StreamedValueView my_value(type, num_mapped, TypedCells(cells), num_spaces, handles.view()); ::vespalib::eval::encode_value(my_value, target); } @@ -143,7 +143,7 @@ MemoryUsage StreamedValueStore::TensorEntryImpl<CT>::get_memory_usage() const { MemoryUsage usage = self_memory_usage<TensorEntryImpl<CT>>(); - usage.merge(vector_extra_memory_usage(handles.view().handles())); + usage.merge(vector_extra_memory_usage(handles.view())); usage.merge(vector_extra_memory_usage(cells)); return usage; } diff --git a/searchlib/src/vespa/searchlib/tensor/streamed_value_store.h b/searchlib/src/vespa/searchlib/tensor/streamed_value_store.h index 3a9d9a0b7b4..1df860f4007 100644 --- a/searchlib/src/vespa/searchlib/tensor/streamed_value_store.h +++ b/searchlib/src/vespa/searchlib/tensor/streamed_value_store.h @@ -18,7 +18,7 @@ class StreamedValueStore : public TensorStore { public: using Value = vespalib::eval::Value; using ValueType = vespalib::eval::ValueType; - using Handles = vespalib::SharedStringRepo::StrongHandles; + using Handles = vespalib::SharedStringRepo::Handles; using MemoryUsage = vespalib::MemoryUsage; // interface for tensor entries |