You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by GitBox <gi...@apache.org> on 2021/09/27 12:15:14 UTC

[GitHub] [pinot] richardstartin edited a comment on pull request #7487: use MethodHandle to access vectorized unsigned comparison on JDK9+

richardstartin edited a comment on pull request #7487:
URL: https://github.com/apache/pinot/pull/7487#issuecomment-927795364


   Here's a quick comparison to show what's at stake here (I don't think the benchmark is worth maintaining in this project). Note that I selected lengths which aren't aligned to make sure slower tail loops execute, which won't happen on aligned inputs.
   
   ```java
   @State(Scope.Benchmark)
   public class BenchmarkByteArrayCompare {
   
     @Param({"7", "31", "1023"})
     int _length;
   
     @Param("1")
     int _offset;
   
     private byte[] _left;
     private byte[] _right;
   
     @Setup(Level.Trial)
     public void setup() {
       _left = new byte[_length];
       ThreadLocalRandom.current().nextBytes(_left);
       _right = Arrays.copyOf(_left, _left.length);
       _right[_right.length - _offset] = (byte) ~_left[_left.length - _offset];
     }
   
     @Benchmark
     public int compare() {
       return ByteArray.compare(_left, _right);
     }
   }
   ```
   
   
   ```
   Benchmark                          (_length)  (_offset)  Mode  Cnt    Score   Error  Units
   BenchmarkByteArrayCompare.compare          7          1  avgt    5    5.942 ± 0.048  ns/op
   BenchmarkByteArrayCompare.compare         31          1  avgt    5   15.298 ± 1.040  ns/op
   BenchmarkByteArrayCompare.compare       1023          1  avgt    5  320.390 ± 1.262  ns/op
   
   Benchmark                          (_length)  (_offset)  Mode  Cnt   Score   Error  Units
   BenchmarkByteArrayCompare.compare          7          1  avgt    5   7.913 ± 0.174  ns/op
   BenchmarkByteArrayCompare.compare         31          1  avgt    5   8.351 ± 0.016  ns/op
   BenchmarkByteArrayCompare.compare       1023          1  avgt    5  22.765 ± 1.566  ns/op
   ```
   
   For inputs shorter than 8 bytes, there is a small setup cost of the order of 1ns, but for larger inputs the improvement is huge. 


-- 
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-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org