tag | 132f268b56ab98e19d1f24eaef83e5b98863bbe9 | |
---|---|---|
tagger | Caleb Spare <cespare@gmail.com> | Wed Sep 04 02:37:34 2019 |
object | de209a9ffae3256185a6bb135d1a0ada7b2b5f09 |
Release 2.1.0
commit | de209a9ffae3256185a6bb135d1a0ada7b2b5f09 | [log] [tgz] |
---|---|---|
author | Caleb Spare <cespare@gmail.com> | Tue Sep 03 23:50:28 2019 |
committer | Caleb Spare <cespare@gmail.com> | Wed Sep 04 02:34:00 2019 |
tree | d505f1fa5cc3cfcd26ebeb2eb87a4c0b4e987f3b | |
parent | 32f3a100fff237d14029d34ec8579ef02aaaf87c [diff] |
Move benchmarks to their own module This avoids all dependencies for users. It also fixes the weird v1 self-dependency. Fixes #28
xxhash is a Go implementation of the 64-bit xxHash algorithm, XXH64. This is a high-quality hashing algorithm that is much faster than anything in the Go standard library.
This package provides a straightforward API:
func Sum64(b []byte) uint64 func Sum64String(s string) uint64 type Digest struct{ ... } func New() *Digest
The Digest
type implements hash.Hash64. Its key methods are:
func (*Digest) Write([]byte) (int, error) func (*Digest) WriteString(string) (int, error) func (*Digest) Sum64() uint64
This implementation provides a fast pure-Go implementation and an even faster assembly implementation for amd64.
Here are some quick benchmarks comparing the pure-Go and assembly implementations of Sum64.
input size | purego | asm |
---|---|---|
5 B | 979.66 MB/s | 1291.17 MB/s |
100 B | 7475.26 MB/s | 7973.40 MB/s |
4 KB | 17573.46 MB/s | 17602.65 MB/s |
10 MB | 17131.46 MB/s | 17142.16 MB/s |
These numbers were generated on Ubuntu 18.04 with an Intel i7-8700K CPU using the following commands under Go 1.11.2:
$ go test -tags purego -benchtime 10s -bench '/xxhash,direct,bytes' $ go test -benchtime 10s -bench '/xxhash,direct,bytes'