You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2023/01/12 17:39:42 UTC
[lucene] 01/02: Speed up 1D BKD merging. (#12079)
This is an automated email from the ASF dual-hosted git repository.
jpountz pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/lucene.git
commit 40350f71c14d5a8c99b356ab0b827c9552adf381
Author: Adrien Grand <jp...@gmail.com>
AuthorDate: Thu Jan 12 18:14:15 2023 +0100
Speed up 1D BKD merging. (#12079)
On the NYC taxis dataset on my local machine, switching from
`Arrays#compareUnsigned` to `ArrayUtil#getUnsignedComparator` yielded a 15%
speedup of BKD merging.
---
lucene/CHANGES.txt | 2 ++
lucene/core/src/java/org/apache/lucene/util/bkd/BKDWriter.java | 8 ++++----
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 3ffd6594bd2..97f1e833019 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -182,6 +182,8 @@ Optimizations
* GITHUB#12017: Aggressive count in BooleanWeight. (Lu Xugang)
+* GITHUB#12079: Faster merging of 1D points. (Adrien Grand)
+
Other
---------------------
diff --git a/lucene/core/src/java/org/apache/lucene/util/bkd/BKDWriter.java b/lucene/core/src/java/org/apache/lucene/util/bkd/BKDWriter.java
index 025342400f3..51c10564ba9 100644
--- a/lucene/core/src/java/org/apache/lucene/util/bkd/BKDWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/util/bkd/BKDWriter.java
@@ -367,19 +367,19 @@ public class BKDWriter implements Closeable {
}
private static class BKDMergeQueue extends PriorityQueue<MergeReader> {
- private final int bytesPerDim;
+ private final ArrayUtil.ByteArrayComparator comparator;
public BKDMergeQueue(int bytesPerDim, int maxSize) {
super(maxSize);
- this.bytesPerDim = bytesPerDim;
+ this.comparator = ArrayUtil.getUnsignedComparator(bytesPerDim);
}
@Override
public boolean lessThan(MergeReader a, MergeReader b) {
assert a != b;
- int cmp =
- Arrays.compareUnsigned(a.packedValue, 0, bytesPerDim, b.packedValue, 0, bytesPerDim);
+ int cmp = comparator.compare(a.packedValue, 0, b.packedValue, 0);
+
if (cmp < 0) {
return true;
} else if (cmp > 0) {