aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-06-09 09:31:52 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-06-09 09:31:52 +0000
commit013ffaf1e6627a048a32cee4d8c29d7843c93462 (patch)
tree57dbdd709d6d4f9640be458cfb178bd82a3c9000 /searchlib
parent4e90b78dd51b7d7387b9a8ccd2c2036f78dd65c5 (diff)
- Compute batch size in one place.
- Compute offset in one place.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp b/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp
index d36d16a679a..ca8513a3c91 100644
--- a/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp
@@ -5,7 +5,6 @@
#include "andnotsearch.h"
#include "sourceblendersearch.h"
#include <vespa/searchlib/common/bitvectoriterator.h>
-#include <vespa/searchlib/fef/termfieldmatchdata.h>
#include <vespa/searchlib/fef/termfieldmatchdataarray.h>
#include <vespa/vespalib/util/optimized.h>
#include <vespa/vespalib/hwaccelrated/iaccelrated.h>
@@ -27,8 +26,9 @@ public:
_accel(IAccelrated::getAccelerator()),
_lastWords()
{
- static_assert(sizeof(_lastWords) == 64, "Latswords should have 64 byte size");
- memset(&_lastWords, 0, sizeof(_lastWords));
+ static_assert(sizeof(_lastWords) == 64, "Lastwords should have 64 byte size");
+ static_assert(NumWordsInBatch == 8, "Batch size should be 8 words.");
+ memset(_lastWords, 0, sizeof(_lastWords));
}
protected:
void updateLastValue(uint32_t docId);
@@ -40,6 +40,7 @@ private:
Update _update;
const IAccelrated & _accel;
alignas(64) Word _lastWords[8];
+ static constexpr size_t NumWordsInBatch = sizeof(_lastWords) / sizeof(Word);
};
template<typename Update>
@@ -56,16 +57,16 @@ private:
struct And {
using Word = BitWord::Word;
- void operator () (const IAccelrated & accel, size_t offset, const std::vector<std::pair<const void *, bool>> & src, Word *dest) {
- accel.and64(offset*sizeof(uint64_t), src, dest);
+ void operator () (const IAccelrated & accel, size_t offset, const std::vector<std::pair<const void *, bool>> & src, void *dest) {
+ accel.and64(offset, src, dest);
}
static bool isAnd() { return true; }
};
struct Or {
using Word = BitWord::Word;
- void operator () (const IAccelrated & accel, size_t offset, const std::vector<std::pair<const void *, bool>> & src, Word *dest) {
- accel.or64(offset*sizeof(uint64_t), src, dest);
+ void operator () (const IAccelrated & accel, size_t offset, const std::vector<std::pair<const void *, bool>> & src, void *dest) {
+ accel.or64(offset, src, dest);
}
static bool isAnd() { return false; }
};
@@ -80,11 +81,11 @@ void MultiBitVectorIterator<Update>::updateLastValue(uint32_t docId)
}
const uint32_t index(wordNum(docId));
if (docId >= _lastMaxDocIdLimitRequireFetch) {
- uint32_t baseIndex = index & ~(sizeof(_lastWords)/sizeof(Word) - 1);
- _update(_accel, baseIndex, _bvs, _lastWords);
- _lastMaxDocIdLimitRequireFetch = (baseIndex + (sizeof(_lastWords)/sizeof(Word))) * WordLen;
+ uint32_t baseIndex = index & ~(NumWordsInBatch - 1);
+ _update(_accel, baseIndex*sizeof(Word), _bvs, _lastWords);
+ _lastMaxDocIdLimitRequireFetch = (baseIndex + NumWordsInBatch) * WordLen;
}
- _lastValue = _lastWords[index % (sizeof(_lastWords)/sizeof(Word))];
+ _lastValue = _lastWords[index % NumWordsInBatch];
_lastMaxDocIdLimit = (index + 1) * WordLen;
}
}