From 42c4c115d6ff3e599e8e0341682b6771a20c8eb1 Mon Sep 17 00:00:00 2001 From: Adrien Grand Date: Mon, 23 Dec 2024 09:38:50 +0100 Subject: [PATCH] Add comment to the SIMD intersection logic. (#14073) I did not know it when I checked in the code, but this is almost exactly the v1 intersection algorithm from the "SIMD compression and the intersection of sorted integers" paper. --- .../internal/vectorization/PanamaVectorUtilSupport.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lucene/core/src/java21/org/apache/lucene/internal/vectorization/PanamaVectorUtilSupport.java b/lucene/core/src/java21/org/apache/lucene/internal/vectorization/PanamaVectorUtilSupport.java index 9273f7c5a813..1369aa5e3f40 100644 --- a/lucene/core/src/java21/org/apache/lucene/internal/vectorization/PanamaVectorUtilSupport.java +++ b/lucene/core/src/java21/org/apache/lucene/internal/vectorization/PanamaVectorUtilSupport.java @@ -771,6 +771,10 @@ private static int squareDistanceBody128(MemorySegment a, MemorySegment b, int l @Override public int findNextGEQ(int[] buffer, int target, int from, int to) { if (ENABLE_FIND_NEXT_GEQ_VECTOR_OPTO) { + // This effectively implements the V1 intersection algorithm from + // D. Lemire, L. Boytsov, N. Kurz SIMD Compression and the Intersection of Sorted Integers + // with T = INT_SPECIES.length(), ie. T=8 with AVX2 and T=16 with AVX-512 + // https://arxiv.org/pdf/1401.6399 for (; from + INT_SPECIES.length() < to; from += INT_SPECIES.length() + 1) { if (buffer[from + INT_SPECIES.length()] >= target) { IntVector vector = IntVector.fromArray(INT_SPECIES, buffer, from);