airlift / aircompressor

A port of Snappy, LZO, LZ4, and Zstandard to Java
Apache License 2.0
566 stars 112 forks source link

Optimize match length count function #95

Closed martint closed 5 years ago

martint commented 5 years ago

Using a counted loop improves performance, especially for long matches

Benchmark (matchLength)  (padding)  Mode  Cnt   Score   Error  Units
before                1          0  avgt   30   4.452 ± 0.074  ns/op
after                 1          0  avgt   30   4.450 ± 0.292  ns/op

before                1          1  avgt   30   4.438 ± 0.069  ns/op
after                 1          1  avgt   30   4.178 ± 0.097  ns/op

before                1          3  avgt   30   4.600 ± 0.111  ns/op
after                 1          3  avgt   30   4.231 ± 0.162  ns/op

before                1          7  avgt   30   4.276 ± 0.089  ns/op
after                 1          7  avgt   30   3.863 ± 0.065  ns/op

before                1         50  avgt   30   4.302 ± 0.093  ns/op
after                 1         50  avgt   30   3.867 ± 0.059  ns/op

before                3          0  avgt   30   4.745 ± 0.025  ns/op
after                 3          0  avgt   30   4.198 ± 0.103  ns/op

before                3          1  avgt   30   4.784 ± 0.058  ns/op
after                 3          1  avgt   30   4.176 ± 0.070  ns/op

before                3          3  avgt   30   4.807 ± 0.133  ns/op
after                 3          3  avgt   30   4.165 ± 0.091  ns/op

before                3          7  avgt   30   4.311 ± 0.132  ns/op
after                 3          7  avgt   30   3.821 ± 0.029  ns/op

before                3         50  avgt   30   4.289 ± 0.099  ns/op
after                 3         50  avgt   30   3.831 ± 0.085  ns/op

before                7          0  avgt   30   4.232 ± 0.038  ns/op
after                 7          0  avgt   30   3.908 ± 0.121  ns/op

before                7          1  avgt   30   4.210 ± 0.043  ns/op
after                 7          1  avgt   30   3.924 ± 0.085  ns/op

before                7          3  avgt   30   4.179 ± 0.123  ns/op
after                 7          3  avgt   30   3.845 ± 0.085  ns/op

before                7          7  avgt   30   4.226 ± 0.114  ns/op
after                 7          7  avgt   30   3.803 ± 0.031  ns/op

before                7         50  avgt   30   4.271 ± 0.129  ns/op
after                 7         50  avgt   30   3.842 ± 0.085  ns/op

before               15          0  avgt   30   4.848 ± 0.095  ns/op
after                15          0  avgt   30   4.397 ± 0.111  ns/op

before               15          1  avgt   30   4.813 ± 0.045  ns/op
after                15          1  avgt   30   4.384 ± 0.087  ns/op

before               15          3  avgt   30   4.835 ± 0.096  ns/op
after                15          3  avgt   30   4.422 ± 0.116  ns/op

before               15          7  avgt   30   4.863 ± 0.075  ns/op
after                15          7  avgt   30   4.413 ± 0.046  ns/op

before               15         50  avgt   30   4.917 ± 0.143  ns/op
after                15         50  avgt   30   4.364 ± 0.044  ns/op

before              127          0  avgt   30  14.394 ± 0.320  ns/op
after               127          0  avgt   30  11.832 ± 0.396  ns/op

before              127          1  avgt   30  14.352 ± 0.273  ns/op
after               127          1  avgt   30  11.543 ± 0.275  ns/op

before              127          3  avgt   30  14.290 ± 0.142  ns/op
after               127          3  avgt   30  11.709 ± 0.293  ns/op

before              127          7  avgt   30  15.361 ± 2.277  ns/op
after               127          7  avgt   30  11.657 ± 0.296  ns/op

before              127         50  avgt   30  14.121 ± 0.301  ns/op
after               127         50  avgt   30  10.911 ± 0.450  ns/op

before              511          0  avgt   30  47.233 ± 0.905  ns/op
after               511          0  avgt   30  31.330 ± 2.087  ns/op

before              511          1  avgt   30  47.137 ± 0.529  ns/op
after               511          1  avgt   30  30.074 ± 1.008  ns/op

before              511          3  avgt   30  47.017 ± 0.474  ns/op
after               511          3  avgt   30  30.523 ± 1.856  ns/op

before              511          7  avgt   30  46.510 ± 0.441  ns/op
after               511          7  avgt   30  31.102 ± 4.902  ns/op

before              511         50  avgt   30  46.789 ± 1.311  ns/op
after               511         50  avgt   30  27.405 ± 0.225  ns/op
martint commented 5 years ago

Merged