Edit: Post removed since the C library relies on SSE2. Will reopen and post once I got a cross-arch package available.
I want to perform some further tests with blake2b implementation in C.
This means that you need to compile the package for your platform.
I am more or less interested in the benchmarks on weaker devices (especially ARM’s and RPI’s).
This requires go
and gcc
The instructions are as follows:
mkdir -p /tmp/src/github.com/AudriusButkevicius/blake2b-opt
cd /tmp/src/github.com/AudriusButkevicius/blake2b-opt
curl -L -O https://github.com/AudriusButkevicius/blake2b-opt/archive/master.tar.gz
tar -zxvf master.tar.gz --strip-components=1
./configure
cat /tmp/src/github.com/AudriusButkevicius/blake2b-opt/framework/include/asmopt.h > /tmp/benchmark.log
make install-lib util
go build blake2b.go
./bin/blake2b-util bench >> /tmp/benchmark.log
mkdir -p /tmp/src/github.com/AudriusButkevicius/gohashcompare
cd /tmp/src/github.com/AudriusButkevicius/gohashcompare
curl -L -O https://github.com/AudriusButkevicius/gohashcompare/archive/master.tar.gz
tar -zxvf master.tar.gz --strip-components=1
export GOPATH=/tmp
go build --ldflags '-extldflags "-static"' ./main.go
./main >> /tmp/benchmark.log
Afterwards, provide content of /tmp/benchmark.log
here or ideally upload it to some pastebin.
Furthermore, you can help us by providing the following file:
/tmp/src/github.com/AudriusButkevicius/blake2b-opt/bin/blake2b.lib
by uploading it somewhere, but please also provide the name of your device.
Here the benchmark.log
and blake2b.lib
from my raspberry pi (model B 512MB) and my netbook (Intel Atom N450, 64bit but pretty slow)
http://alex-graf.de/public/st/benchmark.zip
Saving people the need to download it themselves:
RPI B 512MB:
Build: go1.4 linux-arm
Blake2b CGO 512 200 8344897 ns/op 15.71 MB/s 320 B/op 2 allocs/op
SHA512 30 38897250 ns/op 3.37 MB/s 64 B/op 1 allocs/op
SHA256 100 22712797 ns/op 5.77 MB/s 32 B/op 1 allocs/op
Intel Atom N450:
Build: go1.4 linux-amd64
SHA256 500 3335126 ns/op 39.30 MB/s 32 B/op 1 allocs/op
SHA512 1000 2258643 ns/op 58.03 MB/s 64 B/op 1 allocs/op
Blake2b CGO 512-2 2000 1033368 ns/op 126.84 MB/s 320 B/op 2 allocs/op
Thanks for the benchmarks.
http://davidak.de/tmp/Benchmark.zip
Ubuntu 12.04 VM (64-Bit), 4x Intel Xeon E5520 @ 2.27GHz, 990 MB RAM
Build: go1.1.1 linux-amd64
SHA256-4 500 2438435 ns/op 53.75 MB/s 32 B/op 1 allocs/op
SHA512-4 1000 1440279 ns/op 91.00 MB/s 64 B/op 1 allocs/op
Blake2b CGO 512-4 5000 358430 ns/op 365.68 MB/s 386 B/op 3 allocs/op
elementary OS (Ubuntu 14.04 based) VM (64-Bit) with 8x 2,6GHz (Intel Core i7), 4 GB RAM
Build: go1.2.1 linux-amd64
SHA256-8 2000 1206111 ns/op 108.67 MB/s 32 B/op 1 allocs/op
SHA512-8 2000 817385 ns/op 160.36 MB/s 64 B/op 1 allocs/op
Blake2b CGO 512-8 10000 228387 ns/op 573.90 MB/s 384 B/op 3 allocs/op
elementary OS (Ubuntu 12.04 based) (32-Bit) with 2x 3,16GHz (Intel Core 2 Duo E8500), 4 GB RAM
Build: go1.1.1 linux-386
SHA256-2 1000 2646573 ns/op 49.53 MB/s 32 B/op 1 allocs/op
SHA512-2 500 4801462 ns/op 27.30 MB/s 64 B/op 1 allocs/op
Blake2b CGO 512-2 10000 307482 ns/op 426.27 MB/s 387 B/op 3 allocs/op
i had to install build-essential and golang from PPA: https://stackoverflow.com/questions/17480044/how-to-install-the-current-version-of-go-in-ubuntu
Raspberry Pi B with 700MHz and 256MB RAM
Build: go1.4 linux-arm
SHA256 50 27734445 ns/op 4.73 MB/s 32 B/op 1 allocs/op
SHA512 30 52249703 ns/op 2.51 MB/s 64 B/op 1 allocs/op
Blake2b CGO 512 100 10274646 ns/op 12.76 MB/s 320 B/op 2 allocs/op
i had to use an unnoficial build of go: http://dave.cheney.net/unofficial-arm-tarballs http://tip.golang.org/doc/install
@AudriusButkevicius What value is important? The MB/s?
Compare Hashing Performance.ods (19.4 KB)
We see that Blake2b is much faster than SHA256 on every platform.
I guess you can just do go run main.go
to be honest.
Yes MB/s defines how fast we can crunch through the files.
9 posts were split to a new topic: Faster hashing package