README.md 5.3 KB

go-hex

GoDoc Build Status

An efficient hexadecimal implementation for Golang.

go-hex provides hex encoding and decoding using SSE/AVX instructions on x86-64.

Download

go get github.com/tmthrgd/go-hex

Benchmark

go-hex:

BenchmarkEncode/15-8        100000000           17.4 ns/op   863.43 MB/s
BenchmarkEncode/32-8        100000000           11.9 ns/op  2690.43 MB/s
BenchmarkEncode/128-8       100000000           21.4 ns/op  5982.92 MB/s
BenchmarkEncode/1k-8        20000000            88.5 ns/op  11572.80 MB/s
BenchmarkEncode/16k-8        1000000          1254 ns/op    13058.10 MB/s
BenchmarkEncode/128k-8        100000         12965 ns/op    10109.53 MB/s
BenchmarkEncode/1M-8           10000        119465 ns/op    8777.23 MB/s
BenchmarkEncode/16M-8            500       3530380 ns/op    4752.24 MB/s
BenchmarkEncode/128M-8            50      28001913 ns/op    4793.16 MB/s
BenchmarkDecode/14-8        100000000           12.6 ns/op  1110.01 MB/s
BenchmarkDecode/32-8        100000000           12.5 ns/op  2558.10 MB/s
BenchmarkDecode/128-8       50000000            27.2 ns/op  4697.66 MB/s
BenchmarkDecode/1k-8        10000000           168 ns/op    6093.43 MB/s
BenchmarkDecode/16k-8         500000          2543 ns/op    6442.09 MB/s
BenchmarkDecode/128k-8        100000         20339 ns/op    6444.24 MB/s
BenchmarkDecode/1M-8           10000        164313 ns/op    6381.57 MB/s
BenchmarkDecode/16M-8            500       3099822 ns/op    5412.31 MB/s
BenchmarkDecode/128M-8            50      24865822 ns/op    5397.68 MB/s

encoding/hex:

BenchmarkRefEncode/15-8     50000000            36.1 ns/op   415.07 MB/s
BenchmarkRefEncode/32-8     20000000            72.9 ns/op   439.14 MB/s
BenchmarkRefEncode/128-8     5000000           289 ns/op     441.54 MB/s
BenchmarkRefEncode/1k-8      1000000          2268 ns/op     451.49 MB/s
BenchmarkRefEncode/16k-8       30000         39110 ns/op     418.91 MB/s
BenchmarkRefEncode/128k-8       5000        291260 ns/op     450.02 MB/s
BenchmarkRefEncode/1M-8         1000       2277578 ns/op     460.39 MB/s
BenchmarkRefEncode/16M-8          30      37087543 ns/op     452.37 MB/s
BenchmarkRefEncode/128M-8          5     293611713 ns/op     457.13 MB/s
BenchmarkRefDecode/14-8     30000000            53.7 ns/op   260.49 MB/s
BenchmarkRefDecode/32-8     10000000           128 ns/op     248.44 MB/s
BenchmarkRefDecode/128-8     3000000           481 ns/op     265.95 MB/s
BenchmarkRefDecode/1k-8       300000          4172 ns/op     245.43 MB/s
BenchmarkRefDecode/16k-8       10000        111989 ns/op     146.30 MB/s
BenchmarkRefDecode/128k-8       2000        909077 ns/op     144.18 MB/s
BenchmarkRefDecode/1M-8          200       7275779 ns/op     144.12 MB/s
BenchmarkRefDecode/16M-8          10     116574839 ns/op     143.92 MB/s
BenchmarkRefDecode/128M-8          2     933871637 ns/op     143.72 MB/s

encoding/hex -> go-hex:

benchmark                  old ns/op     new ns/op     delta
BenchmarkEncode/15-8       36.1          17.4          -51.80%
BenchmarkEncode/32-8       72.9          11.9          -83.68%
BenchmarkEncode/128-8      289           21.4          -92.60%
BenchmarkEncode/1k-8       2268          88.5          -96.10%
BenchmarkEncode/16k-8      39110         1254          -96.79%
BenchmarkEncode/128k-8     291260        12965         -95.55%
BenchmarkEncode/1M-8       2277578       119465        -94.75%
BenchmarkEncode/16M-8      37087543      3530380       -90.48%
BenchmarkEncode/128M-8     293611713     28001913      -90.46%
BenchmarkDecode/14-8       53.7          12.6          -76.54%
BenchmarkDecode/32-8       128           12.5          -90.23%
BenchmarkDecode/128-8      481           27.2          -94.35%
BenchmarkDecode/1k-8       4172          168           -95.97%
BenchmarkDecode/16k-8      111989        2543          -97.73%
BenchmarkDecode/128k-8     909077        20339         -97.76%
BenchmarkDecode/1M-8       7275779       164313        -97.74%
BenchmarkDecode/16M-8      116574839     3099822       -97.34%
BenchmarkDecode/128M-8     933871637     24865822      -97.34%

benchmark                  old MB/s     new MB/s     speedup
BenchmarkEncode/15-8       415.07       863.43       2.08x
BenchmarkEncode/32-8       439.14       2690.43      6.13x
BenchmarkEncode/128-8      441.54       5982.92      13.55x
BenchmarkEncode/1k-8       451.49       11572.80     25.63x
BenchmarkEncode/16k-8      418.91       13058.10     31.17x
BenchmarkEncode/128k-8     450.02       10109.53     22.46x
BenchmarkEncode/1M-8       460.39       8777.23      19.06x
BenchmarkEncode/16M-8      452.37       4752.24      10.51x
BenchmarkEncode/128M-8     457.13       4793.16      10.49x
BenchmarkDecode/14-8       260.49       1110.01      4.26x
BenchmarkDecode/32-8       248.44       2558.10      10.30x
BenchmarkDecode/128-8      265.95       4697.66      17.66x
BenchmarkDecode/1k-8       245.43       6093.43      24.83x
BenchmarkDecode/16k-8      146.30       6442.09      44.03x
BenchmarkDecode/128k-8     144.18       6444.24      44.70x
BenchmarkDecode/1M-8       144.12       6381.57      44.28x
BenchmarkDecode/16M-8      143.92       5412.31      37.61x
BenchmarkDecode/128M-8     143.72       5397.68      37.56x

License

Unless otherwise noted, the go-hex source files are distributed under the Modified BSD License found in the LICENSE file.