mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-26 03:03:22 -03:00
fe6a299fc0
5e61532e72
util: optimizes HexStr (Martin Leitner-Ankerl)4e2b99f72a
bench: Adds a benchmark for HexStr (Martin Leitner-Ankerl)67c8411c37
test: Adds a test for HexStr that checks all 256 bytes (Martin Leitner-Ankerl) Pull request description: In my benchmark, this rewrite improves runtime 27% (g++) to 46% (clang++) for the benchmark `HexStrBench`: g++ 11.2.0 | ns/byte | byte/s | err% | ins/byte | cyc/byte | IPC | bra/byte | miss% | total | benchmark |--------------------:|--------------------:|--------:|----------------:|----------------:|-------:|---------------:|--------:|----------:|:---------- | 0.94 | 1,061,381,310.36 | 0.7% | 12.00 | 3.01 | 3.990 | 1.00 | 0.0% | 0.01 | `HexStrBench` master | 0.68 | 1,465,366,544.25 | 1.7% | 6.00 | 2.16 | 2.778 | 1.00 | 0.0% | 0.01 | `HexStrBench` branch clang++ 13.0.1 | ns/byte | byte/s | err% | ins/byte | cyc/byte | IPC | bra/byte | miss% | total | benchmark |--------------------:|--------------------:|--------:|----------------:|----------------:|-------:|---------------:|--------:|----------:|:---------- | 0.80 | 1,244,713,415.92 | 0.9% | 10.00 | 2.56 | 3.913 | 0.50 | 0.0% | 0.01 | `HexStrBench` master | 0.43 | 2,324,188,940.72 | 0.2% | 4.00 | 1.37 | 2.914 | 0.25 | 0.0% | 0.01 | `HexStrBench` branch Note that the idea for this change comes from denis2342 in #23364. This is a rewrite so no unaligned accesses occur. Also, the lookup table is now calculated at compile time, which hopefully makes the code a bit easier to review. ACKs for top commit: laanwj: Code review ACK5e61532e72
aureleoules: tACK5e61532e72
. theStack: ACK5e61532e72
🚤 Tree-SHA512: 40b53d5908332473ef24918d3a80ad1292b60566c02585fa548eb4c3189754971be5a70325f4968fce6d714df898b52d9357aba14d4753a8c70e6ffd273a2319
104 lines
2.9 KiB
Text
104 lines
2.9 KiB
Text
# Copyright (c) 2015-2016 The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
bin_PROGRAMS += bench/bench_bitcoin
|
|
BENCH_SRCDIR = bench
|
|
BENCH_BINARY = bench/bench_bitcoin$(EXEEXT)
|
|
|
|
RAW_BENCH_FILES = \
|
|
bench/data/block413567.raw
|
|
GENERATED_BENCH_FILES = $(RAW_BENCH_FILES:.raw=.raw.h)
|
|
|
|
bench_bench_bitcoin_SOURCES = \
|
|
$(RAW_BENCH_FILES) \
|
|
bench/addrman.cpp \
|
|
bench/base58.cpp \
|
|
bench/bech32.cpp \
|
|
bench/bench.cpp \
|
|
bench/bench.h \
|
|
bench/bench_bitcoin.cpp \
|
|
bench/block_assemble.cpp \
|
|
bench/ccoins_caching.cpp \
|
|
bench/chacha20.cpp \
|
|
bench/chacha_poly_aead.cpp \
|
|
bench/checkblock.cpp \
|
|
bench/checkqueue.cpp \
|
|
bench/crypto_hash.cpp \
|
|
bench/data.cpp \
|
|
bench/data.h \
|
|
bench/duplicate_inputs.cpp \
|
|
bench/examples.cpp \
|
|
bench/gcs_filter.cpp \
|
|
bench/hashpadding.cpp \
|
|
bench/lockedpool.cpp \
|
|
bench/logging.cpp \
|
|
bench/mempool_eviction.cpp \
|
|
bench/mempool_stress.cpp \
|
|
bench/merkle_root.cpp \
|
|
bench/nanobench.cpp \
|
|
bench/nanobench.h \
|
|
bench/peer_eviction.cpp \
|
|
bench/poly1305.cpp \
|
|
bench/prevector.cpp \
|
|
bench/rollingbloom.cpp \
|
|
bench/rpc_blockchain.cpp \
|
|
bench/rpc_mempool.cpp \
|
|
bench/strencodings.cpp \
|
|
bench/util_time.cpp \
|
|
bench/verify_script.cpp
|
|
|
|
nodist_bench_bench_bitcoin_SOURCES = $(GENERATED_BENCH_FILES)
|
|
|
|
bench_bench_bitcoin_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(EVENT_CFLAGS) $(EVENT_PTHREADS_CFLAGS) -I$(builddir)/bench/
|
|
bench_bench_bitcoin_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
|
bench_bench_bitcoin_LDADD = \
|
|
$(LIBTEST_UTIL) \
|
|
$(LIBBITCOIN_NODE) \
|
|
$(LIBBITCOIN_WALLET) \
|
|
$(LIBBITCOIN_COMMON) \
|
|
$(LIBBITCOIN_UTIL) \
|
|
$(LIBBITCOIN_CONSENSUS) \
|
|
$(LIBBITCOIN_CRYPTO) \
|
|
$(LIBLEVELDB) \
|
|
$(LIBMEMENV) \
|
|
$(LIBSECP256K1) \
|
|
$(LIBUNIVALUE) \
|
|
$(EVENT_PTHREADS_LIBS) \
|
|
$(EVENT_LIBS)
|
|
|
|
if ENABLE_ZMQ
|
|
bench_bench_bitcoin_LDADD += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS)
|
|
endif
|
|
|
|
if ENABLE_WALLET
|
|
bench_bench_bitcoin_SOURCES += bench/coin_selection.cpp
|
|
bench_bench_bitcoin_SOURCES += bench/wallet_balance.cpp
|
|
bench_bench_bitcoin_SOURCES += bench/wallet_loading.cpp
|
|
endif
|
|
|
|
bench_bench_bitcoin_LDADD += $(BDB_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(MINIUPNPC_LIBS) $(NATPMP_LIBS) $(SQLITE_LIBS)
|
|
bench_bench_bitcoin_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) $(PTHREAD_FLAGS)
|
|
|
|
CLEAN_BITCOIN_BENCH = bench/*.gcda bench/*.gcno $(GENERATED_BENCH_FILES)
|
|
|
|
CLEANFILES += $(CLEAN_BITCOIN_BENCH)
|
|
|
|
bench/data.cpp: bench/data/block413567.raw.h
|
|
|
|
bitcoin_bench: $(BENCH_BINARY)
|
|
|
|
bench: $(BENCH_BINARY) FORCE
|
|
$(BENCH_BINARY)
|
|
|
|
bitcoin_bench_clean : FORCE
|
|
rm -f $(CLEAN_BITCOIN_BENCH) $(bench_bench_bitcoin_OBJECTS) $(BENCH_BINARY)
|
|
|
|
%.raw.h: %.raw
|
|
@$(MKDIR_P) $(@D)
|
|
@{ \
|
|
echo "static unsigned const char $(*F)_raw[] = {" && \
|
|
$(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' && \
|
|
echo "};"; \
|
|
} > "$@.new" && mv -f "$@.new" "$@"
|
|
@echo "Generated $@"
|