diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-12-14 20:32:29 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2023-12-14 20:32:29 +0000 |
commit | 85eb89cbd200440766975bda21f7e34b0d065c2b (patch) | |
tree | 9fb2d2dee6d50981c2642a0c4ecb70c02ea8303a /searchlib/src | |
parent | d75d60ed150a5c45666874e7e816bd79ea928e91 (diff) |
Deinline the coldest path too.
Diffstat (limited to 'searchlib/src')
-rw-r--r-- | searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp | 14 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.h | 2 |
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 21b1e34b5bb..1d6da48f131 100644 --- a/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp @@ -69,15 +69,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 3269a798db5..5f9a3b20b50 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; |