| 
24 | 24 | import org.apache.lucene.util.quantization.ScalarQuantizer;  | 
25 | 25 | import org.elasticsearch.common.logging.LogConfigurator;  | 
26 | 26 | import org.elasticsearch.core.IOUtils;  | 
 | 27 | +import org.elasticsearch.logging.LogManager;  | 
 | 28 | +import org.elasticsearch.logging.Logger;  | 
27 | 29 | import org.elasticsearch.simdvec.VectorScorerFactory;  | 
28 | 30 | import org.openjdk.jmh.annotations.Benchmark;  | 
29 | 31 | import org.openjdk.jmh.annotations.BenchmarkMode;  | 
@@ -61,6 +63,10 @@ public class Int7uScorerBenchmark {  | 
61 | 63 | 
 
  | 
62 | 64 |     static {  | 
63 | 65 |         LogConfigurator.configureESLogging(); // native access requires logging to be initialized  | 
 | 66 | +        if (supportsHeapSegments() == false) {  | 
 | 67 | +            final Logger LOG = LogManager.getLogger(Int7uScorerBenchmark.class);  | 
 | 68 | +            LOG.warn("*Query targets cannot run on " + "JDK " + Runtime.version());  | 
 | 69 | +        }  | 
64 | 70 |     }  | 
65 | 71 | 
 
  | 
66 | 72 |     @Param({ "96", "768", "1024" })  | 
@@ -129,15 +135,17 @@ public void setup() throws IOException {  | 
129 | 135 |         nativeSqrScorer = factory.getInt7SQVectorScorerSupplier(EUCLIDEAN, in, values, scoreCorrectionConstant).get().scorer();  | 
130 | 136 |         nativeSqrScorer.setScoringOrdinal(0);  | 
131 | 137 | 
 
  | 
132 |  | -        // setup for getInt7SQVectorScorer / query vector scoring  | 
133 |  | -        float[] queryVec = new float[dims];  | 
134 |  | -        for (int i = 0; i < dims; i++) {  | 
135 |  | -            queryVec[i] = ThreadLocalRandom.current().nextFloat();  | 
 | 138 | +        if (supportsHeapSegments()) {  | 
 | 139 | +            // setup for getInt7SQVectorScorer / query vector scoring  | 
 | 140 | +            float[] queryVec = new float[dims];  | 
 | 141 | +            for (int i = 0; i < dims; i++) {  | 
 | 142 | +                queryVec[i] = ThreadLocalRandom.current().nextFloat();  | 
 | 143 | +            }  | 
 | 144 | +            luceneDotScorerQuery = luceneScorer(values, VectorSimilarityFunction.DOT_PRODUCT, queryVec);  | 
 | 145 | +            nativeDotScorerQuery = factory.getInt7SQVectorScorer(VectorSimilarityFunction.DOT_PRODUCT, values, queryVec).get();  | 
 | 146 | +            luceneSqrScorerQuery = luceneScorer(values, VectorSimilarityFunction.EUCLIDEAN, queryVec);  | 
 | 147 | +            nativeSqrScorerQuery = factory.getInt7SQVectorScorer(VectorSimilarityFunction.EUCLIDEAN, values, queryVec).get();  | 
136 | 148 |         }  | 
137 |  | -        luceneDotScorerQuery = luceneScorer(values, VectorSimilarityFunction.DOT_PRODUCT, queryVec);  | 
138 |  | -        nativeDotScorerQuery = factory.getInt7SQVectorScorer(VectorSimilarityFunction.DOT_PRODUCT, values, queryVec).get();  | 
139 |  | -        luceneSqrScorerQuery = luceneScorer(values, VectorSimilarityFunction.EUCLIDEAN, queryVec);  | 
140 |  | -        nativeSqrScorerQuery = factory.getInt7SQVectorScorer(VectorSimilarityFunction.EUCLIDEAN, values, queryVec).get();  | 
141 | 149 |     }  | 
142 | 150 | 
 
  | 
143 | 151 |     @TearDown  | 
@@ -208,6 +216,10 @@ public float squareDistanceNativeQuery() throws IOException {  | 
208 | 216 |         return nativeSqrScorerQuery.score(1);  | 
209 | 217 |     }  | 
210 | 218 | 
 
  | 
 | 219 | +    static boolean supportsHeapSegments() {  | 
 | 220 | +        return Runtime.version().feature() >= 22;  | 
 | 221 | +    }  | 
 | 222 | + | 
211 | 223 |     QuantizedByteVectorValues vectorValues(int dims, int size, IndexInput in, VectorSimilarityFunction sim) throws IOException {  | 
212 | 224 |         var sq = new ScalarQuantizer(0.1f, 0.9f, (byte) 7);  | 
213 | 225 |         var slice = in.slice("values", 0, in.length());  | 
 | 
0 commit comments