diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99HnswVectorsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99HnswVectorsReader.java index faa885f7b2ea..a16e3dc8b06e 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99HnswVectorsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99HnswVectorsReader.java @@ -552,9 +552,11 @@ public void seek(int level, int targetOrd) throws IOException { arcCount = dataIn.readVInt(); assert arcCount <= currentNeighborsBuffer.length : "too many neighbors: " + arcCount; if (arcCount > 0) { - currentNeighborsBuffer[0] = dataIn.readVInt(); - for (int i = 1; i < arcCount; i++) { - currentNeighborsBuffer[i] = currentNeighborsBuffer[i - 1] + dataIn.readVInt(); + // Faster prefix sum computation (see #14979) + int sum = 0; + for (int i = 0; i < arcCount; i++) { + sum += dataIn.readVInt(); + currentNeighborsBuffer[i] = sum; } } arc = -1;