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:14:22 UTC
[lucene] branch main updated: Speed up 1D BKD merging. (#12079)
This is an automated email from the ASF dual-hosted git repository.
jpountz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/lucene.git
The following commit(s) were added to refs/heads/main by this push:
new 729fedcbac6 Speed up 1D BKD merging. (#12079)
729fedcbac6 is described below
commit 729fedcbac65fb3957ab1a2652a05e96f732a691
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 fd7c80c3b0e..408c2fcf838 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -278,6 +278,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 e13ada60868..dd3d4f59508 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
@@ -366,19 +366,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) {