Jackie-Jiang opened a new pull request, #8722: URL: https://github.com/apache/pinot/pull/8722
Borrow the same idea as in #8703, we can reflect the inclusiveness of the value bound through the comparison value to avoid extra per value if check. Also, if the lower bound comparison already fails, we may short-circuit the comparison for the upper bound. Here are the benchmark result, each operation applies 30K values: Before the change: ``` Benchmark Mode Cnt Score Error Units BenchmarkRangeApplySV.doubleEvaluator avgt 5 96.914 ± 5.245 us/op BenchmarkRangeApplySV.floatEvaluator avgt 5 98.179 ± 7.607 us/op BenchmarkRangeApplySV.intEvaluator avgt 5 111.091 ± 1.061 us/op BenchmarkRangeApplySV.longEvaluator avgt 5 95.441 ± 2.418 us/op BenchmarkRangeApplySV.stringEvaluator avgt 5 467.129 ± 89.302 us/op ``` After the change: ``` Benchmark Mode Cnt Score Error Units BenchmarkRangeApplySV.doubleEvaluator avgt 5 68.947 ± 1.562 us/op BenchmarkRangeApplySV.floatEvaluator avgt 5 78.496 ± 5.309 us/op BenchmarkRangeApplySV.intEvaluator avgt 5 66.792 ± 5.647 us/op BenchmarkRangeApplySV.longEvaluator avgt 5 67.519 ± 6.929 us/op BenchmarkRangeApplySV.stringEvaluator avgt 5 423.882 ± 135.095 us/op ``` Benchmark class: ``` @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) @Fork(1) @Warmup(iterations = 3, time = 10) @Measurement(iterations = 5, time = 10) @State(Scope.Benchmark) public class BenchmarkRangeApplySV { BaseRawValueBasedPredicateEvaluator _intEvaluator; BaseRawValueBasedPredicateEvaluator _longEvaluator; BaseRawValueBasedPredicateEvaluator _floatEvaluator; BaseRawValueBasedPredicateEvaluator _doubleEvaluator; BaseRawValueBasedPredicateEvaluator _stringEvaluator; @Setup public void setUp() throws Exception { RangePredicate rangePredicate = new RangePredicate(null, true, "10000", false, "20000"); _intEvaluator = RangePredicateEvaluatorFactory.newRawValueBasedEvaluator(rangePredicate, FieldSpec.DataType.INT); _longEvaluator = RangePredicateEvaluatorFactory.newRawValueBasedEvaluator(rangePredicate, FieldSpec.DataType.LONG); _floatEvaluator = RangePredicateEvaluatorFactory.newRawValueBasedEvaluator(rangePredicate, FieldSpec.DataType.FLOAT); _doubleEvaluator = RangePredicateEvaluatorFactory.newRawValueBasedEvaluator(rangePredicate, FieldSpec.DataType.DOUBLE); _stringEvaluator = RangePredicateEvaluatorFactory.newRawValueBasedEvaluator(rangePredicate, FieldSpec.DataType.STRING); } @Benchmark public void intEvaluator(Blackhole bh) { for (int i = 0; i < 30000; i++) { bh.consume(_intEvaluator.applySV(i)); } } @Benchmark public void longEvaluator(Blackhole bh) { for (int i = 0; i < 30000; i++) { bh.consume(_longEvaluator.applySV((long) i)); } } @Benchmark public void floatEvaluator(Blackhole bh) { for (int i = 0; i < 30000; i++) { bh.consume(_floatEvaluator.applySV((float) i)); } } @Benchmark public void doubleEvaluator(Blackhole bh) { for (int i = 0; i < 30000; i++) { bh.consume(_doubleEvaluator.applySV((double) i)); } } @Benchmark public void stringEvaluator(Blackhole bh) { for (int i = 0; i < 30000; i++) { bh.consume(_stringEvaluator.applySV(Integer.toString(i))); } } } ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org