zeebo / xxh3

XXH3 algorithm in Go
BSD 2-Clause "Simplified" License
403 stars 20 forks source link

Add full seed support #12

Closed klauspost closed 2 years ago

klauspost commented 3 years ago

Updated version of #4 that duplicates code for seed support to keep speed of unseeded operations.

64 bits ported from #4, and added to Hasher. 128 bits: New code.

cpu: AMD Ryzen 9 3950X 16-Core Processor
BenchmarkFixed64/0/default-32           502115580            2.427 ns/op
BenchmarkFixed64/0/seed-32              456687386            2.626 ns/op
BenchmarkFixed64/1/default-32           500157549            2.424 ns/op     412.57 MB/s
BenchmarkFixed64/1/seed-32              457582310            2.624 ns/op     381.05 MB/s
BenchmarkFixed64/2/default-32           502988589            2.515 ns/op     795.20 MB/s
BenchmarkFixed64/2/seed-32              455570487            2.617 ns/op     764.14 MB/s
BenchmarkFixed64/3/default-32           556708663            2.147 ns/op    1397.49 MB/s
BenchmarkFixed64/3/seed-32              500540583            2.393 ns/op    1253.45 MB/s
BenchmarkFixed64/4/default-32           443760067            2.753 ns/op    1452.91 MB/s
BenchmarkFixed64/4/seed-32              416873076            2.869 ns/op    1394.11 MB/s
BenchmarkFixed64/8/default-32           436751470            2.743 ns/op    2916.89 MB/s
BenchmarkFixed64/8/seed-32              416926956            2.890 ns/op    2768.36 MB/s
BenchmarkFixed64/9/default-32           498373018            2.468 ns/op    3646.25 MB/s
BenchmarkFixed64/9/seed-32              486979585            2.483 ns/op    3625.13 MB/s
BenchmarkFixed64/16/default-32          500565638            2.475 ns/op    6465.45 MB/s
BenchmarkFixed64/16/seed-32             483982400            2.469 ns/op    6481.23 MB/s
BenchmarkFixed64/17/default-32          329918040            3.621 ns/op    4694.30 MB/s
BenchmarkFixed64/17/seed-32             304521690            3.913 ns/op    4344.11 MB/s
BenchmarkFixed64/32/default-32          324469370            3.656 ns/op    8752.41 MB/s
BenchmarkFixed64/32/seed-32             309484858            3.875 ns/op    8259.06 MB/s
BenchmarkFixed64/33/default-32          235912114            5.097 ns/op    6473.79 MB/s
BenchmarkFixed64/33/seed-32             214626010            5.583 ns/op    5911.06 MB/s
BenchmarkFixed64/64/default-32          236769002            5.067 ns/op    12630.63 MB/s
BenchmarkFixed64/64/seed-32             216592540            5.541 ns/op    11549.51 MB/s
BenchmarkFixed64/65/default-32          178004383            6.726 ns/op    9663.99 MB/s
BenchmarkFixed64/65/seed-32             166293452            7.226 ns/op    8994.99 MB/s
BenchmarkFixed64/96/default-32          179198703            6.730 ns/op    14265.35 MB/s
BenchmarkFixed64/96/seed-32             166370434            7.256 ns/op    13230.57 MB/s
BenchmarkFixed64/97/default-32          149042013            8.057 ns/op    12039.95 MB/s
BenchmarkFixed64/97/seed-32             136212301            8.796 ns/op    11027.75 MB/s
BenchmarkFixed64/128/default-32         149291146            7.993 ns/op    16014.47 MB/s
BenchmarkFixed64/128/seed-32            136609206            8.746 ns/op    14634.74 MB/s
BenchmarkFixed64/129/default-32         131856292            9.102 ns/op    14172.10 MB/s
BenchmarkFixed64/129/seed-32            122928664            9.730 ns/op    13257.38 MB/s
BenchmarkFixed64/240/default-32         68028752            17.42 ns/op 13780.88 MB/s
BenchmarkFixed64/240/seed-32            62782192            18.63 ns/op 12879.01 MB/s
BenchmarkFixed64/241-AVX2/default-32    68358928            16.55 ns/op 14564.28 MB/s
BenchmarkFixed64/241-AVX2/seed-32       43491812            27.32 ns/op 8822.82 MB/s
BenchmarkFixed64/241-SSE2/default-32    68019112            17.66 ns/op 13649.86 MB/s
BenchmarkFixed64/241-SSE2/seed-32       37898766            31.62 ns/op 7621.44 MB/s
BenchmarkFixed64/241/default-32         36656107            32.43 ns/op 7431.37 MB/s
BenchmarkFixed64/241/seed-32            25395373            46.93 ns/op 5135.59 MB/s
BenchmarkFixed64/512-AVX2/default-32    62445034            19.10 ns/op 26800.54 MB/s
BenchmarkFixed64/512-AVX2/seed-32       38580122            30.77 ns/op 16641.55 MB/s
BenchmarkFixed64/512-SSE2/default-32    42174962            28.08 ns/op 18230.62 MB/s
BenchmarkFixed64/512-SSE2/seed-32       29141066            40.70 ns/op 12580.76 MB/s
BenchmarkFixed64/512/default-32         21038715            56.65 ns/op 9037.26 MB/s
BenchmarkFixed64/512/seed-32            16747822            71.06 ns/op 7205.48 MB/s
BenchmarkFixed64/1024-AVX2/default-32   44020704            27.31 ns/op 37498.26 MB/s
BenchmarkFixed64/1024-AVX2/seed-32      30545076            39.12 ns/op 26178.18 MB/s
BenchmarkFixed64/1024-SSE2/default-32   27156693            44.69 ns/op 22911.91 MB/s
BenchmarkFixed64/1024-SSE2/seed-32      20811364            57.44 ns/op 17827.36 MB/s
BenchmarkFixed64/1024/default-32        11358676           105.2 ns/op  9736.26 MB/s
BenchmarkFixed64/1024/seed-32           10053913           119.7 ns/op  8554.47 MB/s
BenchmarkFixed64/8192-AVX2/default-32    8718560           136.2 ns/op  60156.17 MB/s
BenchmarkFixed64/8192-AVX2/seed-32       8033977           148.4 ns/op  55212.87 MB/s
BenchmarkFixed64/8192-SSE2/default-32    4390557           274.4 ns/op  29856.16 MB/s
BenchmarkFixed64/8192-SSE2/seed-32       4168213           287.2 ns/op  28525.77 MB/s
BenchmarkFixed64/8192/default-32         1513728           791.9 ns/op  10344.35 MB/s
BenchmarkFixed64/8192/seed-32            1436068           833.9 ns/op  9823.57 MB/s
BenchmarkFixed64/102400-AVX2/default-32               744139          1568 ns/op    65285.90 MB/s
BenchmarkFixed64/102400-AVX2/seed-32                  743664          1579 ns/op    64834.99 MB/s
BenchmarkFixed64/102400-SSE2/default-32               344264          3308 ns/op    30957.98 MB/s
BenchmarkFixed64/102400-SSE2/seed-32                  354777          3323 ns/op    30816.45 MB/s
BenchmarkFixed64/102400/default-32                    120934          9781 ns/op    10469.46 MB/s
BenchmarkFixed64/102400/seed-32                       117171         10171 ns/op    10068.29 MB/s
BenchmarkFixed64/1024000-AVX2/default-32               73567         16082 ns/op    63675.25 MB/s
BenchmarkFixed64/1024000-AVX2/seed-32                  73556         16152 ns/op    63396.29 MB/s
BenchmarkFixed64/1024000-SSE2/default-32               35470         33649 ns/op    30431.51 MB/s
BenchmarkFixed64/1024000-SSE2/seed-32                  35527         33611 ns/op    30465.87 MB/s
BenchmarkFixed64/1024000/default-32                    12205         98762 ns/op    10368.40 MB/s
BenchmarkFixed64/1024000/seed-32                       10000        102339 ns/op    10005.99 MB/s
BenchmarkFixed64/10240000-AVX2/default-32               6957        164888 ns/op    62102.84 MB/s
BenchmarkFixed64/10240000-AVX2/seed-32                  6414        164867 ns/op    62110.59 MB/s
BenchmarkFixed64/10240000-SSE2/default-32               3310        338310 ns/op    30268.11 MB/s
BenchmarkFixed64/10240000-SSE2/seed-32                  3445        351167 ns/op    29159.90 MB/s
BenchmarkFixed64/10240000/default-32                     946       1174067 ns/op    8721.82 MB/s
BenchmarkFixed64/10240000/seed-32                       1120       1102615 ns/op    9287.01 MB/s
BenchmarkFixed64/102400000-AVX2/default-32               210       5721031 ns/op    17898.87 MB/s
BenchmarkFixed64/102400000-AVX2/seed-32                  211       5443095 ns/op    18812.83 MB/s
BenchmarkFixed64/102400000-SSE2/default-32               154       6744777 ns/op    15182.12 MB/s
BenchmarkFixed64/102400000-SSE2/seed-32                  184       7197146 ns/op    14227.86 MB/s
BenchmarkFixed64/102400000/default-32                     91      13854980 ns/op    7390.84 MB/s
BenchmarkFixed64/102400000/seed-32                        85      14555981 ns/op    7034.91 MB/s

The Hasher can be reused and keeps the key state.

cpu: AMD Ryzen 9 3950X 16-Core Processor            
BenchmarkFixed128/0/default-32          416331432            2.850 ns/op
BenchmarkFixed128/0/seed-32             357644836            3.362 ns/op
BenchmarkFixed128/1/default-32          357294813            3.349 ns/op     298.64 MB/s
BenchmarkFixed128/1/seed-32             322657665            3.718 ns/op     268.95 MB/s
BenchmarkFixed128/2/default-32          381831927            3.159 ns/op     633.04 MB/s
BenchmarkFixed128/2/seed-32             327142880            3.683 ns/op     543.09 MB/s
BenchmarkFixed128/3/default-32          388036573            3.103 ns/op     966.88 MB/s
BenchmarkFixed128/3/seed-32             331520743            3.622 ns/op     828.29 MB/s
BenchmarkFixed128/4/default-32          363709435            3.280 ns/op    1219.38 MB/s
BenchmarkFixed128/4/seed-32             339963566            3.528 ns/op    1133.73 MB/s
BenchmarkFixed128/8/default-32          365782843            3.281 ns/op    2438.15 MB/s
BenchmarkFixed128/8/seed-32             339036396            3.530 ns/op    2266.56 MB/s
BenchmarkFixed128/9/default-32          289378575            4.131 ns/op    2178.72 MB/s
BenchmarkFixed128/9/seed-32             288218145            4.137 ns/op    2175.43 MB/s
BenchmarkFixed128/16/default-32         291406282            4.129 ns/op    3874.64 MB/s
BenchmarkFixed128/16/seed-32            289152654            4.153 ns/op    3852.66 MB/s
BenchmarkFixed128/17/default-32         218846992            5.412 ns/op    3140.91 MB/s
BenchmarkFixed128/17/seed-32            207038943            5.804 ns/op    2929.10 MB/s
BenchmarkFixed128/32/default-32         223354089            5.711 ns/op    5603.67 MB/s
BenchmarkFixed128/32/seed-32            202968138            5.825 ns/op    5494.02 MB/s
BenchmarkFixed128/33/default-32         163157976            7.327 ns/op    4504.06 MB/s
BenchmarkFixed128/33/seed-32            151520737            7.901 ns/op    4176.66 MB/s
BenchmarkFixed128/64/default-32         161572161            7.369 ns/op    8685.36 MB/s
BenchmarkFixed128/64/seed-32            152701032            7.904 ns/op    8096.82 MB/s
BenchmarkFixed128/65/default-32         129351505            9.173 ns/op    7086.03 MB/s
BenchmarkFixed128/65/seed-32            100000000           10.20 ns/op 6374.84 MB/s
BenchmarkFixed128/96/default-32         122155568            9.579 ns/op    10022.25 MB/s
BenchmarkFixed128/96/seed-32            100000000           10.59 ns/op 9068.90 MB/s
BenchmarkFixed128/97/default-32         100000000           11.47 ns/op 8456.52 MB/s
BenchmarkFixed128/97/seed-32            100000000           12.10 ns/op 8014.35 MB/s
BenchmarkFixed128/128/default-32        100000000           11.42 ns/op 11212.53 MB/s
BenchmarkFixed128/128/seed-32           96993210            12.08 ns/op 10592.00 MB/s
BenchmarkFixed128/129/default-32        78058934            15.33 ns/op 8412.91 MB/s
BenchmarkFixed128/129/seed-32           72235197            17.75 ns/op 7266.76 MB/s
BenchmarkFixed128/240/default-32        45628243            26.87 ns/op 8930.44 MB/s
BenchmarkFixed128/240/seed-32           41661313            28.13 ns/op 8531.34 MB/s
BenchmarkFixed128/241-AVX2/default-32   56973834            20.71 ns/op 11637.15 MB/s
BenchmarkFixed128/241-AVX2/seed-32      33875337            35.48 ns/op 6793.40 MB/s
BenchmarkFixed128/241-SSE2/default-32   54393646            22.37 ns/op 10774.23 MB/s
BenchmarkFixed128/241-SSE2/seed-32      32044263            37.03 ns/op 6507.65 MB/s
BenchmarkFixed128/241/default-32        33118796            36.06 ns/op 6684.07 MB/s
BenchmarkFixed128/241/seed-32           22310928            55.60 ns/op 4334.37 MB/s
BenchmarkFixed128/512-AVX2/default-32   49546034            23.60 ns/op 21698.48 MB/s
BenchmarkFixed128/512-AVX2/seed-32      31921005            37.66 ns/op 13594.64 MB/s
BenchmarkFixed128/512-SSE2/default-32   37790156            30.55 ns/op 16761.44 MB/s
BenchmarkFixed128/512-SSE2/seed-32      25906287            45.81 ns/op 11177.44 MB/s
BenchmarkFixed128/512/default-32        20059341            59.90 ns/op 8548.29 MB/s
BenchmarkFixed128/512/seed-32           15279169            80.87 ns/op 6330.89 MB/s
BenchmarkFixed128/1024-AVX2/default-32  39635616            30.41 ns/op 33675.21 MB/s
BenchmarkFixed128/1024-AVX2/seed-32     25689274            47.70 ns/op 21468.23 MB/s
BenchmarkFixed128/1024-SSE2/default-32  25274544            47.07 ns/op 21754.63 MB/s
BenchmarkFixed128/1024-SSE2/seed-32     19263460            62.43 ns/op 16401.98 MB/s
BenchmarkFixed128/1024/default-32       11208228           107.4 ns/op  9533.96 MB/s
BenchmarkFixed128/1024/seed-32           9525070           126.5 ns/op  8093.44 MB/s
BenchmarkFixed128/8192-AVX2/default-32   7391833           146.8 ns/op  55808.12 MB/s
BenchmarkFixed128/8192-AVX2/seed-32      7765632           155.1 ns/op  52807.87 MB/s
BenchmarkFixed128/8192-SSE2/default-32   4311584           277.4 ns/op  29529.16 MB/s
BenchmarkFixed128/8192-SSE2/seed-32      4097803           293.2 ns/op  27937.89 MB/s
BenchmarkFixed128/8192/default-32        1468501           826.4 ns/op  9912.45 MB/s
BenchmarkFixed128/8192/seed-32           1446652           822.9 ns/op  9955.34 MB/s
BenchmarkFixed128/102400-AVX2/default-32              724610          1575 ns/op    65010.04 MB/s
BenchmarkFixed128/102400-AVX2/seed-32                 721166          1586 ns/op    64550.76 MB/s
BenchmarkFixed128/102400-SSE2/default-32              356696          3436 ns/op    29799.67 MB/s
BenchmarkFixed128/102400-SSE2/seed-32                 357700          3335 ns/op    30705.46 MB/s
BenchmarkFixed128/102400/default-32                   118638         10080 ns/op    10159.16 MB/s
BenchmarkFixed128/102400/seed-32                      121681          9914 ns/op    10328.68 MB/s
BenchmarkFixed128/1024000-AVX2/default-32              71001         16370 ns/op    62555.05 MB/s
BenchmarkFixed128/1024000-AVX2/seed-32                 62028         16546 ns/op    61886.37 MB/s
BenchmarkFixed128/1024000-SSE2/default-32              33898         34045 ns/op    30077.97 MB/s
BenchmarkFixed128/1024000-SSE2/seed-32                 35126         34051 ns/op    30072.18 MB/s
BenchmarkFixed128/1024000/default-32                   10000        102492 ns/op    9991.03 MB/s
BenchmarkFixed128/1024000/seed-32                      12046         99191 ns/op    10323.52 MB/s
BenchmarkFixed128/10240000-AVX2/default-32              6798        173702 ns/op    58951.41 MB/s
BenchmarkFixed128/10240000-AVX2/seed-32                 6829        176219 ns/op    58109.55 MB/s
BenchmarkFixed128/10240000-SSE2/default-32              3202        350050 ns/op    29253.01 MB/s
BenchmarkFixed128/10240000-SSE2/seed-32                 3516        344809 ns/op    29697.61 MB/s
BenchmarkFixed128/10240000/default-32                   1062       1080276 ns/op    9479.06 MB/s
BenchmarkFixed128/10240000/seed-32                      1158       1048260 ns/op    9768.57 MB/s
BenchmarkFixed128/102400000-AVX2/default-32              254       4547298 ns/op    22518.87 MB/s
BenchmarkFixed128/102400000-AVX2/seed-32                 260       4553841 ns/op    22486.51 MB/s
BenchmarkFixed128/102400000-SSE2/default-32              178       6570520 ns/op    15584.76 MB/s
BenchmarkFixed128/102400000-SSE2/seed-32                 177       6955960 ns/op    14721.19 MB/s
BenchmarkFixed128/102400000/default-32                    81      13826001 ns/op    7406.34 MB/s
BenchmarkFixed128/102400000/seed-32                       90      13166462 ns/op    7777.34 MB/s
PASS
ok      github.com/zeebo/xxh3   121.753s 
klauspost commented 2 years ago

Hasher benchmark:

goos: windows
goarch: amd64
pkg: github.com/zeebo/xxh3
cpu: AMD Ryzen 9 3950X 16-Core Processor            
BenchmarkHasher64/16/go/plain-32    132361942            9.070 ns/op    1764.00 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/16/go/seed-32     120946587            9.916 ns/op    1613.58 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/16/avx2/plain-32  132551456            9.046 ns/op    1768.70 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/16/avx2/seed-32   120966583            9.910 ns/op    1614.50 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/16/sse2/plain-32  132745168            9.071 ns/op    1763.91 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/16/sse2/seed-32   120903742            9.973 ns/op    1604.27 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/64/go/plain-32    99832779            12.30 ns/op 5204.80 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/64/go/seed-32     88539975            13.19 ns/op 4853.09 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/64/avx2/plain-32  95480584            12.24 ns/op 5227.29 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/64/avx2/seed-32   88313866            13.28 ns/op 4819.08 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/64/sse2/plain-32  99568536            12.24 ns/op 5226.63 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/64/sse2/seed-32   91695448            13.18 ns/op 4855.94 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/256/go/plain-32   27735980            42.33 ns/op 6047.48 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/256/go/seed-32    20460811            58.59 ns/op 4369.14 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/256/avx2/plain-32             43664149            27.42 ns/op 9337.41 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/256/avx2/seed-32              29492797            40.29 ns/op 6353.36 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/256/sse2/plain-32             42487200            27.48 ns/op 9315.38 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/256/sse2/seed-32              27753428            42.53 ns/op 6018.71 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/1024/go/plain-32              10050166           118.6 ns/op  8635.71 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/1024/go/seed-32                8734291           137.4 ns/op  7454.75 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/1024/avx2/plain-32            28147011            42.93 ns/op 23853.72 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/1024/avx2/seed-32             21531499            55.94 ns/op 18306.73 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/1024/sse2/plain-32            19256968            62.00 ns/op 16516.53 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/1024/sse2/seed-32             16324730            73.61 ns/op 13910.47 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/4096/go/plain-32               2668345           449.1 ns/op  9119.75 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/4096/go/seed-32                2617776           457.8 ns/op  8947.12 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/4096/avx2/plain-32             9362886           127.3 ns/op  32181.53 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/4096/avx2/seed-32              9394250           127.7 ns/op  32074.71 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/4096/sse2/plain-32             6240434           192.3 ns/op  21303.07 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/4096/sse2/seed-32              6263018           192.5 ns/op  21276.46 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/16384/go/plain-32               646498          1797 ns/op    9115.98 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/16384/go/seed-32                629174          1835 ns/op    8928.75 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/16384/avx2/plain-32            2499645           481.0 ns/op  34062.97 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/16384/avx2/seed-32             2504042           480.1 ns/op  34123.45 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/16384/sse2/plain-32            1562600           767.8 ns/op  21338.09 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/16384/sse2/seed-32             1544410           776.9 ns/op  21087.91 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/65536/go/plain-32               160936          7509 ns/op    8727.95 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/65536/go/seed-32                156096          7651 ns/op    8566.17 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/65536/avx2/plain-32             508386          2305 ns/op    28432.92 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/65536/avx2/seed-32              519114          2291 ns/op    28601.55 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/65536/sse2/plain-32             355677          3404 ns/op    19249.84 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/65536/sse2/seed-32              354942          3405 ns/op    19244.80 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/262144/go/plain-32               40036         29940 ns/op    8755.57 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/262144/go/seed-32                39601         30478 ns/op    8600.97 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/262144/avx2/plain-32            129085          9187 ns/op    28535.51 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/262144/avx2/seed-32             130216          9180 ns/op    28554.48 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/262144/sse2/plain-32             88402         13612 ns/op    19258.13 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/262144/sse2/seed-32              88375         13598 ns/op    19278.77 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/1048576/go/plain-32               9964        122286 ns/op    8574.75 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/1048576/go/seed-32                9196        124692 ns/op    8409.34 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/1048576/avx2/plain-32            30085         39926 ns/op    26263.21 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/1048576/avx2/seed-32             29902         40002 ns/op    26213.33 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/1048576/sse2/plain-32            20605         57867 ns/op    18120.51 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/1048576/sse2/seed-32             20734         57824 ns/op    18133.90 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/4194304/go/plain-32               2410        489892 ns/op    8561.68 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/4194304/go/seed-32                2372        498236 ns/op    8418.30 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/4194304/avx2/plain-32             7372        159687 ns/op    26265.73 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/4194304/avx2/seed-32              7245        160216 ns/op    26179.12 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/4194304/sse2/plain-32             5011        231563 ns/op    18113.05 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/4194304/sse2/seed-32              5089        231585 ns/op    18111.30 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/16777216/go/plain-32               487       2419070 ns/op    6935.40 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/16777216/go/seed-32                460       2614072 ns/op    6418.04 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/16777216/avx2/plain-32            1173       1122912 ns/op    14940.81 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/16777216/avx2/seed-32             1014       1030943 ns/op    16273.67 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/16777216/sse2/plain-32             846       1445568 ns/op    11605.96 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/16777216/sse2/seed-32              889       1433268 ns/op    11705.57 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/67108864/go/plain-32               100      10717384 ns/op    6261.68 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/67108864/go/seed-32                 99      11764693 ns/op    5704.26 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/67108864/avx2/plain-32             189       6311313 ns/op    10633.11 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/67108864/avx2/seed-32              189       6323100 ns/op    10613.29 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/67108864/sse2/plain-32             158       7547296 ns/op    8891.78 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/67108864/sse2/seed-32              158       7565688 ns/op    8870.16 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/268435456/go/plain-32               27      42900148 ns/op    6257.22 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/268435456/go/seed-32                25      47167288 ns/op    5691.14 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/268435456/avx2/plain-32             46      25125537 ns/op    10683.77 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/268435456/avx2/seed-32              48      25088762 ns/op    10699.43 MB/s          0 B/op          0 allocs/op
BenchmarkHasher64/268435456/sse2/plain-32             38      30119150 ns/op    8912.45 MB/s           0 B/op          0 allocs/op
BenchmarkHasher64/268435456/sse2/seed-32              39      30297149 ns/op    8860.09 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/16/go/plain-32               100000000           10.85 ns/op 1474.02 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/16/go/seed-32                100000000           10.70 ns/op 1495.32 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/16/avx2/plain-32             100000000           10.88 ns/op 1470.89 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/16/avx2/seed-32              100000000           10.67 ns/op 1499.01 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/16/sse2/plain-32             100000000           10.95 ns/op 1461.28 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/16/sse2/seed-32              100000000           10.67 ns/op 1499.95 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/64/go/plain-32               78674078            14.52 ns/op 4407.18 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/64/go/seed-32                79365603            15.09 ns/op 4240.79 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/64/avx2/plain-32             81991855            14.48 ns/op 4419.11 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/64/avx2/seed-32              82415317            15.07 ns/op 4247.97 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/64/sse2/plain-32             85245435            14.48 ns/op 4419.75 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/64/sse2/seed-32              79947234            15.07 ns/op 4247.07 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/256/go/plain-32              25383018            46.94 ns/op 5454.05 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/256/go/seed-32               18807008            63.97 ns/op 4001.88 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/256/avx2/plain-32            37446638            31.89 ns/op 8027.23 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/256/avx2/seed-32             22929292            51.99 ns/op 4923.99 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/256/sse2/plain-32            36241293            32.76 ns/op 7814.77 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/256/sse2/seed-32             25815445            46.96 ns/op 5451.53 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/1024/go/plain-32              9847066           122.3 ns/op  8372.64 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/1024/go/seed-32               8395552           142.6 ns/op  7180.67 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/1024/avx2/plain-32           25359523            47.97 ns/op 21347.95 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/1024/avx2/seed-32            14630702            81.51 ns/op 12562.16 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/1024/sse2/plain-32           18509149            64.32 ns/op 15920.16 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/1024/sse2/seed-32            15605553            77.99 ns/op 13129.72 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/4096/go/plain-32              2599041           461.9 ns/op  8867.27 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/4096/go/seed-32               2604702           461.2 ns/op  8881.26 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/4096/avx2/plain-32            9207826           130.3 ns/op  31427.84 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/4096/avx2/seed-32             9134344           131.2 ns/op  31226.79 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/4096/sse2/plain-32            6129124           196.7 ns/op  20828.49 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/4096/sse2/seed-32             5709160           211.0 ns/op  19411.64 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/16384/go/plain-32              662894          1823 ns/op    8986.91 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/16384/go/seed-32               663543          1840 ns/op    8903.20 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/16384/avx2/plain-32           2492983           483.0 ns/op  33923.63 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/16384/avx2/seed-32            2477380           484.3 ns/op  33830.86 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/16384/sse2/plain-32           1560356           771.1 ns/op  21247.46 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/16384/sse2/seed-32            1505863           793.7 ns/op  20642.08 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/65536/go/plain-32              158632          7543 ns/op    8688.00 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/65536/go/seed-32               156362          7638 ns/op    8579.84 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/65536/avx2/plain-32            509672          2305 ns/op    28435.64 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/65536/avx2/seed-32             519068          2306 ns/op    28413.78 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/65536/sse2/plain-32            350754          3429 ns/op    19114.11 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/65536/sse2/seed-32             350644          3443 ns/op    19037.24 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/262144/go/plain-32              40096         29969 ns/op    8747.07 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/262144/go/seed-32               39368         30461 ns/op    8605.83 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/262144/avx2/plain-32           130340          9193 ns/op    28515.67 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/262144/avx2/seed-32            130544          9221 ns/op    28428.01 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/262144/sse2/plain-32            88260         13593 ns/op    19285.06 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/262144/sse2/seed-32             88588         13620 ns/op    19246.48 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/1048576/go/plain-32              9195        122948 ns/op    8528.63 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/1048576/go/seed-32               8862        125890 ns/op    8329.33 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/1048576/avx2/plain-32           29991         39954 ns/op    26244.61 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/1048576/avx2/seed-32            29935         40129 ns/op    26130.39 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/1048576/sse2/plain-32           20665         58118 ns/op    18042.18 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/1048576/sse2/seed-32            20654         57932 ns/op    18100.11 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/4194304/go/plain-32              2436        493451 ns/op    8499.94 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/4194304/go/seed-32               2404        502356 ns/op    8349.27 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/4194304/avx2/plain-32            7009        160109 ns/op    26196.62 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/4194304/avx2/seed-32             7470        160445 ns/op    26141.62 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/4194304/sse2/plain-32            5095        231687 ns/op    18103.36 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/4194304/sse2/seed-32             4981        232476 ns/op    18041.90 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/16777216/go/plain-32              488       2418268 ns/op    6937.70 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/16777216/go/seed-32               476       2594129 ns/op    6467.38 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/16777216/avx2/plain-32           1033       1124619 ns/op    14918.13 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/16777216/avx2/seed-32            1088       1028934 ns/op    16305.44 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/16777216/sse2/plain-32            860       1440442 ns/op    11647.27 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/16777216/sse2/seed-32             880       1400430 ns/op    11980.05 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/67108864/go/plain-32              100      10780787 ns/op    6224.86 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/67108864/go/seed-32                98      11792892 ns/op    5690.62 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/67108864/avx2/plain-32            189       6311541 ns/op    10632.72 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/67108864/avx2/seed-32             188       6402239 ns/op    10482.09 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/67108864/sse2/plain-32            156       7678965 ns/op    8739.31 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/67108864/sse2/seed-32             158       7689645 ns/op    8727.17 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/268435456/go/plain-32              26      42878115 ns/op    6260.43 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/268435456/go/seed-32               25      46528692 ns/op    5769.25 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/268435456/avx2/plain-32            46      25074578 ns/op    10705.48 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/268435456/avx2/seed-32             46      24934115 ns/op    10765.79 MB/s          0 B/op          0 allocs/op
BenchmarkHasher128/268435456/sse2/plain-32            39      29948956 ns/op    8963.10 MB/s           0 B/op          0 allocs/op
BenchmarkHasher128/268435456/sse2/seed-32             39      30070987 ns/op    8926.73 MB/s           0 B/op          0 allocs/op
PASS
ok      github.com/zeebo/xxh3   219.006s 
klauspost commented 2 years ago

Added a copyless preloop for initial writes that are bigger than a block+stride.

Small penalty to small payloads, but great for bigger.

Since Hasher will probably be used mostly for bigger payloads that seems like a reasonable tradeoff.

benchmark                                      old ns/op     new ns/op     delta
BenchmarkHasher64/16/go/plain-32               9.07          9.34          +2.95%
BenchmarkHasher64/16/go/seed-32                9.92          10.5          +5.59%
BenchmarkHasher64/16/avx2/plain-32             9.05          9.33          +3.15%
BenchmarkHasher64/16/avx2/seed-32              9.91          10.5          +5.75%
BenchmarkHasher64/16/sse2/plain-32             9.07          9.33          +2.87%
BenchmarkHasher64/16/sse2/seed-32              9.97          10.5          +5.38%
BenchmarkHasher64/64/go/plain-32               12.3          12.7          +3.41%
BenchmarkHasher64/64/go/seed-32                13.2          14.2          +7.28%
BenchmarkHasher64/64/avx2/plain-32             12.2          12.7          +3.84%
BenchmarkHasher64/64/avx2/seed-32              13.3          14.3          +7.45%
BenchmarkHasher64/64/sse2/plain-32             12.2          12.7          +3.92%
BenchmarkHasher64/64/sse2/seed-32              13.2          14.1          +6.83%
BenchmarkHasher64/256/go/plain-32              42.3          44.0          +4.02%
BenchmarkHasher64/256/go/seed-32               58.6          59.9          +2.30%
BenchmarkHasher64/256/avx2/plain-32            27.4          28.3          +3.17%
BenchmarkHasher64/256/avx2/seed-32             40.3          41.2          +2.36%
BenchmarkHasher64/256/sse2/plain-32            27.5          28.4          +3.31%
BenchmarkHasher64/256/sse2/seed-32             42.5          43.9          +3.27%
BenchmarkHasher64/1024/go/plain-32             119           122           +2.45%
BenchmarkHasher64/1024/go/seed-32              137           141           +2.55%
BenchmarkHasher64/1024/avx2/plain-32           42.9          44.5          +3.73%
BenchmarkHasher64/1024/avx2/seed-32            55.9          57.5          +2.88%
BenchmarkHasher64/1024/sse2/plain-32           62.0          64.2          +3.58%
BenchmarkHasher64/1024/sse2/seed-32            73.6          75.7          +2.88%
BenchmarkHasher64/4096/go/plain-32             449           428           -4.79%
BenchmarkHasher64/4096/go/seed-32              458           435           -5.05%
BenchmarkHasher64/4096/avx2/plain-32           127           97.1          -23.72%
BenchmarkHasher64/4096/avx2/seed-32            128           97.0          -24.04%
BenchmarkHasher64/4096/sse2/plain-32           192           166           -13.94%
BenchmarkHasher64/4096/sse2/seed-32            192           166           -13.71%
BenchmarkHasher64/16384/go/plain-32            1797          1643          -8.57%
BenchmarkHasher64/16384/go/seed-32             1835          1679          -8.50%
BenchmarkHasher64/16384/avx2/plain-32          481           304           -36.90%
BenchmarkHasher64/16384/avx2/seed-32           480           304           -36.66%
BenchmarkHasher64/16384/sse2/plain-32          768           596           -22.44%
BenchmarkHasher64/16384/sse2/seed-32           777           595           -23.45%
BenchmarkHasher64/65536/go/plain-32            7509          6521          -13.16%
BenchmarkHasher64/65536/go/seed-32             7651          6601          -13.72%
BenchmarkHasher64/65536/avx2/plain-32          2305          1174          -49.07%
BenchmarkHasher64/65536/avx2/seed-32           2291          1176          -48.67%
BenchmarkHasher64/65536/sse2/plain-32          3404          2306          -32.26%
BenchmarkHasher64/65536/sse2/seed-32           3405          2319          -31.89%
BenchmarkHasher64/262144/go/plain-32           29940         25967         -13.27%
BenchmarkHasher64/262144/go/seed-32            30478         26321         -13.64%
BenchmarkHasher64/262144/avx2/plain-32         9187          4577          -50.18%
BenchmarkHasher64/262144/avx2/seed-32          9180          4592          -49.98%
BenchmarkHasher64/262144/sse2/plain-32         13612         9144          -32.82%
BenchmarkHasher64/262144/sse2/seed-32          13598         9124          -32.90%
BenchmarkHasher64/1048576/go/plain-32          122286        104266        -14.74%
BenchmarkHasher64/1048576/go/seed-32           124692        105724        -15.21%
BenchmarkHasher64/1048576/avx2/plain-32        39926         19192         -51.93%
BenchmarkHasher64/1048576/avx2/seed-32         40002         19250         -51.88%
BenchmarkHasher64/1048576/sse2/plain-32        57867         37980         -34.37%
BenchmarkHasher64/1048576/sse2/seed-32         57824         37972         -34.33%
BenchmarkHasher64/4194304/go/plain-32          489892        436735        -10.85%
BenchmarkHasher64/4194304/go/seed-32           498236        443695        -10.95%
BenchmarkHasher64/4194304/avx2/plain-32        159687        103800        -35.00%
BenchmarkHasher64/4194304/avx2/seed-32         160216        104599        -34.71%
BenchmarkHasher64/4194304/sse2/plain-32        231563        171661        -25.87%
BenchmarkHasher64/4194304/sse2/seed-32         231585        171472        -25.96%
BenchmarkHasher64/16777216/go/plain-32         2419070       2170393       -10.28%
BenchmarkHasher64/16777216/go/seed-32          2614072       2196001       -15.99%
BenchmarkHasher64/16777216/avx2/plain-32       1122912       812622        -27.63%
BenchmarkHasher64/16777216/avx2/seed-32        1030943       821987        -20.27%
BenchmarkHasher64/16777216/sse2/plain-32       1445568       1021819       -29.31%
BenchmarkHasher64/16777216/sse2/seed-32        1433268       1035612       -27.74%
BenchmarkHasher64/67108864/go/plain-32         10717384      8763927       -18.23%
BenchmarkHasher64/67108864/go/seed-32          11764693      8869836       -24.61%
BenchmarkHasher64/67108864/avx2/plain-32       6311313       3413034       -45.92%
BenchmarkHasher64/67108864/avx2/seed-32        6323100       3320728       -47.48%
BenchmarkHasher64/67108864/sse2/plain-32       7547296       4200915       -44.34%
BenchmarkHasher64/67108864/sse2/seed-32        7565688       4158657       -45.03%
BenchmarkHasher64/268435456/go/plain-32        42900148      34811853      -18.85%
BenchmarkHasher64/268435456/go/seed-32         47167288      35460039      -24.82%
BenchmarkHasher64/268435456/avx2/plain-32      25125537      13928190      -44.57%
BenchmarkHasher64/268435456/avx2/seed-32       25088762      13934935      -44.46%
BenchmarkHasher64/268435456/sse2/plain-32      30119150      17303694      -42.55%
BenchmarkHasher64/268435456/sse2/seed-32       30297149      17426832      -42.48%
BenchmarkHasher128/16/go/plain-32              10.8          11.0          +1.75%
BenchmarkHasher128/16/go/seed-32               10.7          11.2          +4.30%
BenchmarkHasher128/16/avx2/plain-32            10.9          11.0          +0.83%
BenchmarkHasher128/16/avx2/seed-32             10.7          10.9          +2.34%
BenchmarkHasher128/16/sse2/plain-32            10.9          11.0          +0.18%
BenchmarkHasher128/16/sse2/seed-32             10.7          10.9          +2.44%
BenchmarkHasher128/64/go/plain-32              14.5          14.8          +1.65%
BenchmarkHasher128/64/go/seed-32               15.1          15.2          +0.93%
BenchmarkHasher128/64/avx2/plain-32            14.5          14.7          +1.73%
BenchmarkHasher128/64/avx2/seed-32             15.1          15.2          +1.00%
BenchmarkHasher128/64/sse2/plain-32            14.5          14.7          +1.73%
BenchmarkHasher128/64/sse2/seed-32             15.1          15.2          +1.13%
BenchmarkHasher128/256/go/plain-32             46.9          62.6          +33.30%
BenchmarkHasher128/256/go/seed-32              64.0          64.4          +0.70%
BenchmarkHasher128/256/avx2/plain-32           31.9          32.5          +1.94%
BenchmarkHasher128/256/avx2/seed-32            52.0          44.4          -14.62%
BenchmarkHasher128/256/sse2/plain-32           32.8          33.1          +1.19%
BenchmarkHasher128/256/sse2/seed-32            47.0          48.0          +2.19%
BenchmarkHasher128/1024/go/plain-32            122           144           +18.07%
BenchmarkHasher128/1024/go/seed-32             143           143           +0.42%
BenchmarkHasher128/1024/avx2/plain-32          48.0          48.4          +0.85%
BenchmarkHasher128/1024/avx2/seed-32           81.5          61.2          -24.86%
BenchmarkHasher128/1024/sse2/plain-32          64.3          65.4          +1.73%
BenchmarkHasher128/1024/sse2/seed-32           78.0          78.5          +0.60%
BenchmarkHasher128/4096/go/plain-32            462           422           -8.59%
BenchmarkHasher128/4096/go/seed-32             461           432           -6.33%
BenchmarkHasher128/4096/avx2/plain-32          130           95.8          -26.46%
BenchmarkHasher128/4096/avx2/seed-32           131           96.3          -26.59%
BenchmarkHasher128/4096/sse2/plain-32          197           176           -10.52%
BenchmarkHasher128/4096/sse2/seed-32           211           180           -14.69%
BenchmarkHasher128/16384/go/plain-32           1823          1639          -10.09%
BenchmarkHasher128/16384/go/seed-32            1840          1677          -8.86%
BenchmarkHasher128/16384/avx2/plain-32         483           306           -36.65%
BenchmarkHasher128/16384/avx2/seed-32          484           304           -37.21%
BenchmarkHasher128/16384/sse2/plain-32         771           603           -21.79%
BenchmarkHasher128/16384/sse2/seed-32          794           607           -23.55%
BenchmarkHasher128/65536/go/plain-32           7543          6483          -14.05%
BenchmarkHasher128/65536/go/seed-32            7638          6588          -13.75%
BenchmarkHasher128/65536/avx2/plain-32         2305          1177          -48.94%
BenchmarkHasher128/65536/avx2/seed-32          2306          1183          -48.70%
BenchmarkHasher128/65536/sse2/plain-32         3429          2318          -32.40%
BenchmarkHasher128/65536/sse2/seed-32          3443          2320          -32.62%
BenchmarkHasher128/262144/go/plain-32          29969         25896         -13.59%
BenchmarkHasher128/262144/go/seed-32           30461         26300         -13.66%
BenchmarkHasher128/262144/avx2/plain-32        9193          4575          -50.23%
BenchmarkHasher128/262144/avx2/seed-32         9221          4575          -50.38%
BenchmarkHasher128/262144/sse2/plain-32        13593         9116          -32.94%
BenchmarkHasher128/262144/sse2/seed-32         13620         9134          -32.94%
BenchmarkHasher128/1048576/go/plain-32         122948        104575        -14.94%
BenchmarkHasher128/1048576/go/seed-32          125890        106158        -15.67%
BenchmarkHasher128/1048576/avx2/plain-32       39954         19196         -51.95%
BenchmarkHasher128/1048576/avx2/seed-32        40129         19288         -51.94%
BenchmarkHasher128/1048576/sse2/plain-32       58118         38131         -34.39%
BenchmarkHasher128/1048576/sse2/seed-32        57932         37946         -34.50%
BenchmarkHasher128/4194304/go/plain-32         493451        416740        -15.55%
BenchmarkHasher128/4194304/go/seed-32          502356        422838        -15.83%
BenchmarkHasher128/4194304/avx2/plain-32       160109        77045         -51.88%
BenchmarkHasher128/4194304/avx2/seed-32        160445        77259         -51.85%
BenchmarkHasher128/4194304/sse2/plain-32       231687        151870        -34.45%
BenchmarkHasher128/4194304/sse2/seed-32        232476        151958        -34.63%
BenchmarkHasher128/16777216/go/plain-32        2418268       1979228       -18.16%
BenchmarkHasher128/16777216/go/seed-32         2594129       2010799       -22.49%
BenchmarkHasher128/16777216/avx2/plain-32      1124619       615349        -45.28%
BenchmarkHasher128/16777216/avx2/seed-32       1028934       601365        -41.55%
BenchmarkHasher128/16777216/sse2/plain-32      1440442       812778        -43.57%
BenchmarkHasher128/16777216/sse2/seed-32       1400430       844471        -39.70%
BenchmarkHasher128/67108864/go/plain-32        10780787      8585564       -20.36%
BenchmarkHasher128/67108864/go/seed-32         11792892      8754885       -25.76%
BenchmarkHasher128/67108864/avx2/plain-32      6311541       3343733       -47.02%
BenchmarkHasher128/67108864/avx2/seed-32       6402239       3303074       -48.41%
BenchmarkHasher128/67108864/sse2/plain-32      7678965       4170337       -45.69%
BenchmarkHasher128/67108864/sse2/seed-32       7689645       4219645       -45.13%
BenchmarkHasher128/268435456/go/plain-32       42878115      34154168      -20.35%
BenchmarkHasher128/268435456/go/seed-32        46528692      34885655      -25.02%
BenchmarkHasher128/268435456/avx2/plain-32     25074578      13406721      -46.53%
BenchmarkHasher128/268435456/avx2/seed-32      24934115      13445259      -46.08%
BenchmarkHasher128/268435456/sse2/plain-32     29948956      16646546      -44.42%
BenchmarkHasher128/268435456/sse2/seed-32      30070987      16912347      -43.76%

benchmark                                      old MB/s     new MB/s     speedup
BenchmarkHasher64/16/go/plain-32               1764.00      1713.51      0.97x
BenchmarkHasher64/16/go/seed-32                1613.58      1528.33      0.95x
BenchmarkHasher64/16/avx2/plain-32             1768.70      1714.76      0.97x
BenchmarkHasher64/16/avx2/seed-32              1614.50      1526.80      0.95x
BenchmarkHasher64/16/sse2/plain-32             1763.91      1714.66      0.97x
BenchmarkHasher64/16/sse2/seed-32              1604.27      1521.86      0.95x
BenchmarkHasher64/64/go/plain-32               5204.80      5029.50      0.97x
BenchmarkHasher64/64/go/seed-32                4853.09      4523.96      0.93x
BenchmarkHasher64/64/avx2/plain-32             5227.29      5034.26      0.96x
BenchmarkHasher64/64/avx2/seed-32              4819.08      4484.34      0.93x
BenchmarkHasher64/64/sse2/plain-32             5226.63      5032.63      0.96x
BenchmarkHasher64/64/sse2/seed-32              4855.94      4544.39      0.94x
BenchmarkHasher64/256/go/plain-32              6047.48      5813.67      0.96x
BenchmarkHasher64/256/go/seed-32               4369.14      4270.74      0.98x
BenchmarkHasher64/256/avx2/plain-32            9337.41      9047.93      0.97x
BenchmarkHasher64/256/avx2/seed-32             6353.36      6207.21      0.98x
BenchmarkHasher64/256/sse2/plain-32            9315.38      9018.63      0.97x
BenchmarkHasher64/256/sse2/seed-32             6018.71      5828.95      0.97x
BenchmarkHasher64/1024/go/plain-32             8635.71      8428.97      0.98x
BenchmarkHasher64/1024/go/seed-32              7454.75      7266.67      0.97x
BenchmarkHasher64/1024/avx2/plain-32           23853.72     22997.97     0.96x
BenchmarkHasher64/1024/avx2/seed-32            18306.73     17793.62     0.97x
BenchmarkHasher64/1024/sse2/plain-32           16516.53     15944.72     0.97x
BenchmarkHasher64/1024/sse2/seed-32            13910.47     13521.23     0.97x
BenchmarkHasher64/4096/go/plain-32             9119.75      9579.02      1.05x
BenchmarkHasher64/4096/go/seed-32              8947.12      9422.36      1.05x
BenchmarkHasher64/4096/avx2/plain-32           32181.53     42184.73     1.31x
BenchmarkHasher64/4096/avx2/seed-32            32074.71     42225.71     1.32x
BenchmarkHasher64/4096/sse2/plain-32           21303.07     24747.53     1.16x
BenchmarkHasher64/4096/sse2/seed-32            21276.46     24666.13     1.16x
BenchmarkHasher64/16384/go/plain-32            9115.98      9972.01      1.09x
BenchmarkHasher64/16384/go/seed-32             8928.75      9757.02      1.09x
BenchmarkHasher64/16384/avx2/plain-32          34062.97     53988.74     1.58x
BenchmarkHasher64/16384/avx2/seed-32           34123.45     53868.80     1.58x
BenchmarkHasher64/16384/sse2/plain-32          21338.09     27515.09     1.29x
BenchmarkHasher64/16384/sse2/seed-32           21087.91     27549.92     1.31x
BenchmarkHasher64/65536/go/plain-32            8727.95      10050.46     1.15x
BenchmarkHasher64/65536/go/seed-32             8566.17      9928.04      1.16x
BenchmarkHasher64/65536/avx2/plain-32          28432.92     55810.43     1.96x
BenchmarkHasher64/65536/avx2/seed-32           28601.55     55723.45     1.95x
BenchmarkHasher64/65536/sse2/plain-32          19249.84     28414.07     1.48x
BenchmarkHasher64/65536/sse2/seed-32           19244.80     28260.91     1.47x
BenchmarkHasher64/262144/go/plain-32           8755.57      10095.42     1.15x
BenchmarkHasher64/262144/go/seed-32            8600.97      9959.38      1.16x
BenchmarkHasher64/262144/avx2/plain-32         28535.51     57275.09     2.01x
BenchmarkHasher64/262144/avx2/seed-32          28554.48     57084.79     2.00x
BenchmarkHasher64/262144/sse2/plain-32         19258.13     28668.38     1.49x
BenchmarkHasher64/262144/sse2/seed-32          19278.77     28731.63     1.49x
BenchmarkHasher64/1048576/go/plain-32          8574.75      10056.76     1.17x
BenchmarkHasher64/1048576/go/seed-32           8409.34      9918.04      1.18x
BenchmarkHasher64/1048576/avx2/plain-32        26263.21     54635.47     2.08x
BenchmarkHasher64/1048576/avx2/seed-32         26213.33     54472.66     2.08x
BenchmarkHasher64/1048576/sse2/plain-32        18120.51     27608.67     1.52x
BenchmarkHasher64/1048576/sse2/seed-32         18133.90     27614.45     1.52x
BenchmarkHasher64/4194304/go/plain-32          8561.68      9603.78      1.12x
BenchmarkHasher64/4194304/go/seed-32           8418.30      9453.12      1.12x
BenchmarkHasher64/4194304/avx2/plain-32        26265.73     40407.47     1.54x
BenchmarkHasher64/4194304/avx2/seed-32         26179.12     40098.91     1.53x
BenchmarkHasher64/4194304/sse2/plain-32        18113.05     24433.71     1.35x
BenchmarkHasher64/4194304/sse2/seed-32         18111.30     24460.51     1.35x
BenchmarkHasher64/16777216/go/plain-32         6935.40      7730.04      1.11x
BenchmarkHasher64/16777216/go/seed-32          6418.04      7639.90      1.19x
BenchmarkHasher64/16777216/avx2/plain-32       14940.81     20645.77     1.38x
BenchmarkHasher64/16777216/avx2/seed-32        16273.67     20410.56     1.25x
BenchmarkHasher64/16777216/sse2/plain-32       11605.96     16418.97     1.41x
BenchmarkHasher64/16777216/sse2/seed-32        11705.57     16200.29     1.38x
BenchmarkHasher64/67108864/go/plain-32         6261.68      7657.40      1.22x
BenchmarkHasher64/67108864/go/seed-32          5704.26      7565.96      1.33x
BenchmarkHasher64/67108864/avx2/plain-32       10633.11     19662.52     1.85x
BenchmarkHasher64/67108864/avx2/seed-32        10613.29     20209.08     1.90x
BenchmarkHasher64/67108864/sse2/plain-32       8891.78      15974.82     1.80x
BenchmarkHasher64/67108864/sse2/seed-32        8870.16      16137.15     1.82x
BenchmarkHasher64/268435456/go/plain-32        6257.22      7711.04      1.23x
BenchmarkHasher64/268435456/go/seed-32         5691.14      7570.08      1.33x
BenchmarkHasher64/268435456/avx2/plain-32      10683.77     19272.82     1.80x
BenchmarkHasher64/268435456/avx2/seed-32       10699.43     19263.49     1.80x
BenchmarkHasher64/268435456/sse2/plain-32      8912.45      15513.19     1.74x
BenchmarkHasher64/268435456/sse2/seed-32       8860.09      15403.57     1.74x
BenchmarkHasher128/16/go/plain-32              1474.02      1449.19      0.98x
BenchmarkHasher128/16/go/seed-32               1495.32      1434.23      0.96x
BenchmarkHasher128/16/avx2/plain-32            1470.89      1457.89      0.99x
BenchmarkHasher128/16/avx2/seed-32             1499.01      1465.41      0.98x
BenchmarkHasher128/16/sse2/plain-32            1461.28      1458.72      1.00x
BenchmarkHasher128/16/sse2/seed-32             1499.95      1463.88      0.98x
BenchmarkHasher128/64/go/plain-32              4407.18      4337.46      0.98x
BenchmarkHasher128/64/go/seed-32               4240.79      4202.85      0.99x
BenchmarkHasher128/64/avx2/plain-32            4419.11      4345.29      0.98x
BenchmarkHasher128/64/avx2/seed-32             4247.97      4203.63      0.99x
BenchmarkHasher128/64/sse2/plain-32            4419.75      4345.99      0.98x
BenchmarkHasher128/64/sse2/seed-32             4247.07      4200.67      0.99x
BenchmarkHasher128/256/go/plain-32             5454.05      4091.20      0.75x
BenchmarkHasher128/256/go/seed-32              4001.88      3974.04      0.99x
BenchmarkHasher128/256/avx2/plain-32           8027.23      7874.67      0.98x
BenchmarkHasher128/256/avx2/seed-32            4923.99      5767.46      1.17x
BenchmarkHasher128/256/sse2/plain-32           7814.77      7723.52      0.99x
BenchmarkHasher128/256/sse2/seed-32            5451.53      5334.89      0.98x
BenchmarkHasher128/1024/go/plain-32            8372.64      7092.17      0.85x
BenchmarkHasher128/1024/go/seed-32             7180.67      7150.69      1.00x
BenchmarkHasher128/1024/avx2/plain-32          21347.95     21166.06     0.99x
BenchmarkHasher128/1024/avx2/seed-32           12562.16     16719.68     1.33x
BenchmarkHasher128/1024/sse2/plain-32          15920.16     15650.63     0.98x
BenchmarkHasher128/1024/sse2/seed-32           13129.72     13051.17     0.99x
BenchmarkHasher128/4096/go/plain-32            8867.27      9701.22      1.09x
BenchmarkHasher128/4096/go/seed-32             8881.26      9481.03      1.07x
BenchmarkHasher128/4096/avx2/plain-32          31427.84     42747.22     1.36x
BenchmarkHasher128/4096/avx2/seed-32           31226.79     42525.99     1.36x
BenchmarkHasher128/4096/sse2/plain-32          20828.49     23278.00     1.12x
BenchmarkHasher128/4096/sse2/seed-32           19411.64     22759.31     1.17x
BenchmarkHasher128/16384/go/plain-32           8986.91      9994.51      1.11x
BenchmarkHasher128/16384/go/seed-32            8903.20      9772.52      1.10x
BenchmarkHasher128/16384/avx2/plain-32         33923.63     53540.25     1.58x
BenchmarkHasher128/16384/avx2/seed-32          33830.86     53884.99     1.59x
BenchmarkHasher128/16384/sse2/plain-32         21247.46     27164.64     1.28x
BenchmarkHasher128/16384/sse2/seed-32          20642.08     27000.65     1.31x
BenchmarkHasher128/65536/go/plain-32           8688.00      10108.71     1.16x
BenchmarkHasher128/65536/go/seed-32            8579.84      9947.65      1.16x
BenchmarkHasher128/65536/avx2/plain-32         28435.64     55703.99     1.96x
BenchmarkHasher128/65536/avx2/seed-32          28413.78     55415.59     1.95x
BenchmarkHasher128/65536/sse2/plain-32         19114.11     28277.07     1.48x
BenchmarkHasher128/65536/sse2/seed-32          19037.24     28251.04     1.48x
BenchmarkHasher128/262144/go/plain-32          8747.07      10122.95     1.16x
BenchmarkHasher128/262144/go/seed-32           8605.83      9967.37      1.16x
BenchmarkHasher128/262144/avx2/plain-32        28515.67     57295.03     2.01x
BenchmarkHasher128/262144/avx2/seed-32         28428.01     57295.63     2.02x
BenchmarkHasher128/262144/sse2/plain-32        19285.06     28757.30     1.49x
BenchmarkHasher128/262144/sse2/seed-32         19246.48     28699.81     1.49x
BenchmarkHasher128/1048576/go/plain-32         8528.63      10027.02     1.18x
BenchmarkHasher128/1048576/go/seed-32          8329.33      9877.55      1.19x
BenchmarkHasher128/1048576/avx2/plain-32       26244.61     54625.49     2.08x
BenchmarkHasher128/1048576/avx2/seed-32        26130.39     54363.13     2.08x
BenchmarkHasher128/1048576/sse2/plain-32       18042.18     27499.11     1.52x
BenchmarkHasher128/1048576/sse2/seed-32        18100.11     27633.14     1.53x
BenchmarkHasher128/4194304/go/plain-32         8499.94      10064.56     1.18x
BenchmarkHasher128/4194304/go/seed-32          8349.27      9919.40      1.19x
BenchmarkHasher128/4194304/avx2/plain-32       26196.62     54439.32     2.08x
BenchmarkHasher128/4194304/avx2/seed-32        26141.62     54288.58     2.08x
BenchmarkHasher128/4194304/sse2/plain-32       18103.36     27617.66     1.53x
BenchmarkHasher128/4194304/sse2/seed-32        18041.90     27601.77     1.53x
BenchmarkHasher128/16777216/go/plain-32        6937.70      8476.65      1.22x
BenchmarkHasher128/16777216/go/seed-32         6467.38      8343.55      1.29x
BenchmarkHasher128/16777216/avx2/plain-32      14918.13     27264.55     1.83x
BenchmarkHasher128/16777216/avx2/seed-32       16305.44     27898.56     1.71x
BenchmarkHasher128/16777216/sse2/plain-32      11647.27     20641.82     1.77x
BenchmarkHasher128/16777216/sse2/seed-32       11980.05     19867.14     1.66x
BenchmarkHasher128/67108864/go/plain-32        6224.86      7816.48      1.26x
BenchmarkHasher128/67108864/go/seed-32         5690.62      7665.30      1.35x
BenchmarkHasher128/67108864/avx2/plain-32      10632.72     20070.04     1.89x
BenchmarkHasher128/67108864/avx2/seed-32       10482.09     20317.09     1.94x
BenchmarkHasher128/67108864/sse2/plain-32      8739.31      16091.95     1.84x
BenchmarkHasher128/67108864/sse2/seed-32       8727.17      15903.91     1.82x
BenchmarkHasher128/268435456/go/plain-32       6260.43      7859.52      1.26x
BenchmarkHasher128/268435456/go/seed-32        5769.25      7694.72      1.33x
BenchmarkHasher128/268435456/avx2/plain-32     10705.48     20022.45     1.87x
BenchmarkHasher128/268435456/avx2/seed-32      10765.79     19965.06     1.85x
BenchmarkHasher128/268435456/sse2/plain-32     8963.10      16125.60     1.80x
BenchmarkHasher128/268435456/sse2/seed-32      8926.73      15872.16     1.78x