aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-12-14 20:32:29 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2023-12-15 15:57:19 +0000
commit2a0b850e93cb8d228e9017ab23a0bfc231865b30 (patch)
tree426527acf8db0b68ec0a47c36c52c0f24d198e37
parentcd4ccd9fe96daf59412af0e98c4b359933d17b1b (diff)
Deinline the coldest path too.
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp14
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.h2
2 files changed, 13 insertions, 3 deletions
diff --git a/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp b/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp
index 331f01d4a82..b13bf4a10e2 100644
--- a/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp
@@ -70,15 +70,23 @@ MultiBitVector<Update>::updateLastValueCold(uint32_t docId) noexcept
}
const uint32_t index(BitWord::wordNum(docId));
if (docId >= _lastMaxDocIdLimitRequireFetch) {
- uint32_t baseIndex = index & ~(NumWordsInBatch - 1);
- _update(_accel, baseIndex*sizeof(Word), _bvs, _lastWords);
- _lastMaxDocIdLimitRequireFetch = (baseIndex + NumWordsInBatch) * BitWord::WordLen;
+ fetchChunk(index);
}
_lastValue = _lastWords[index % NumWordsInBatch];
_lastMaxDocIdLimit = (index + 1) * BitWord::WordLen;
return false;
}
+template<typename Update>
+void
+MultiBitVector<Update>::fetchChunk(uint32_t index) noexcept
+{
+ uint32_t baseIndex = index & ~(NumWordsInBatch - 1);
+ _update(_accel, baseIndex*sizeof(Word), _bvs, _lastWords);
+ _lastMaxDocIdLimitRequireFetch = (baseIndex + NumWordsInBatch) * BitWord::WordLen;
+}
+
+
template<typename Update>
diff --git a/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.h b/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.h
index 66598e28e3e..0d9e2c4f25f 100644
--- a/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.h
+++ b/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.h
@@ -44,6 +44,8 @@ private:
return false;
}
VESPA_DLL_LOCAL bool updateLastValueCold(uint32_t docId) noexcept __attribute__((noinline));
+ VESPA_DLL_LOCAL void fetchChunk(uint32_t docId) noexcept __attribute__((noinline));
+
using IAccelrated = vespalib::hwaccelrated::IAccelrated;
Update _update;