|
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