elements/src/bench
Wladimir J. van der Laan 0de7cc848e
Merge #13191: Specialized double-SHA256 with 64 byte inputs with SSE4.1 and AVX2
4defdfab94 [MOVEONLY] Move unused Merkle branch code to tests (Pieter Wuille)
4437d6e1f3 8-way AVX2 implementation for double SHA256 on 64-byte inputs (Pieter Wuille)
230294bf5f 4-way SSE4.1 implementation for double SHA256 on 64-byte inputs (Pieter Wuille)
1f0e7ca09c Use SHA256D64 in Merkle root computation (Pieter Wuille)
d0c9632883 Specialized double sha256 for 64 byte inputs (Pieter Wuille)
57f34630fb Refactor SHA256 code (Pieter Wuille)
0df017889b Benchmark Merkle root computation (Pieter Wuille)

Pull request description:

  This introduces a framework for specialized double-SHA256 with 64 byte inputs. 4 different implementations are provided:
  * Generic C++ (reusing the normal SHA256 code)
  * Specialized C++ for 64-byte inputs, but no special instructions
  * 4-way using SSE4.1 intrinsics
  * 8-way using AVX2 intrinsics

  On my own system (AVX2 capable), I get these benchmarks for computing the Merkle root of 9001 leaves (supported lengths / special instructions / parallellism):
  * 7.2 ms with varsize/naive/1way (master, non-SSE4 hardware)
  * 5.8 ms with size64/naive/1way (this PR, non-SSE4 capable systems)
  * 4.8 ms with varsize/SSE4/1way (master, SSE4 hardware)
  * 2.9 ms with size64/SSE4/4way (this PR, SSE4 hardware)
  * 1.1 ms with size64/AVX2/8way (this PR, AVX2 hardware)

Tree-SHA512: efa32d48b32820d9ce788ead4eb583949265be8c2e5f538c94bc914e92d131a57f8c1ee26c6f998e81fb0e30675d4e2eddc3360bcf632676249036018cff343e
2018-06-04 12:11:53 +02:00
..
data Add deserialize + CheckBlock benchmarks, and a full block hex 2016-11-09 11:27:59 -08:00
.gitignore Ignore bench_bitcoin binary. 2015-10-06 17:46:12 +02:00
base58.cpp Increment MIT Licence copyright header year on files modified in 2017 2018-01-03 02:26:56 +09:00
bench.cpp benchmark: Removed bench/perf.cpp 2018-04-18 19:53:10 -07:00
bench.h trivial: Mark overrides as such. 2018-05-20 09:15:39 +02:00
bench_bitcoin.cpp bench: Use non-throwing ParseDouble(...) instead of throwing boost::lexical_cast<double>(...) 2018-06-03 21:30:39 +02:00
ccoins_caching.cpp Increment MIT Licence copyright header year on files modified in 2017 2018-01-03 02:26:56 +09:00
checkblock.cpp Increment MIT Licence copyright header year on files modified in 2017 2018-01-03 02:26:56 +09:00
checkqueue.cpp Increment MIT Licence copyright header year on files modified in 2017 2018-01-03 02:26:56 +09:00
coin_selection.cpp scripted-diff: Rename wallet database classes 2018-04-07 11:48:27 -05:00
crypto_hash.cpp Specialized double sha256 for 64 byte inputs 2018-05-29 14:05:00 -07:00
Examples.cpp Increment MIT Licence copyright header year on files modified in 2017 2018-01-03 02:26:56 +09:00
lockedpool.cpp Merge #12048: Use best-fit strategy in Arena, now O(log(n)) instead O(n) 2018-03-22 14:28:37 +01:00
mempool_eviction.cpp bench: Amend mempool_eviction test for witness txs 2018-04-17 19:51:47 -04:00
merkle_root.cpp Use SHA256D64 in Merkle root computation 2018-05-29 14:17:07 -07:00
prevector.cpp Make it clear which functions that are intended to be translation unit local 2018-05-03 21:47:40 +02:00
rollingbloom.cpp Increment MIT Licence copyright header year on files modified in 2017 2018-01-03 02:26:56 +09:00
verify_script.cpp tests: Avoid copies of CTransaction 2018-04-11 14:59:53 -04:00