summaryrefslogtreecommitdiffstats
path: root/searchlib/src
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2021-01-06 14:49:48 +0000
committerHåvard Pettersen <havardpe@oath.com>2021-01-11 11:08:19 +0000
commit32292572be63bf1725d34e4c071cd6690ecd43e8 (patch)
tree2306a12514572cfa6323a92ad120d5d8d5c69b60 /searchlib/src
parent381e20b7609eb6557168425089a6a5c948c50554 (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.cpp32
-rw-r--r--searchlib/src/vespa/searchlib/tensor/streamed_value_store.h2
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