View in context in the libbitcoin Slack #general mirror.
Hi all, We finished the current libbitcoin direct-integration benchmark/example package for `shrec/UltrafastSecp256k1`. The goal of this integration path is: - Direct C++ integration via `<ufsecp/libbitcoin.hpp>` - No C ABI dependency for libbitcoin integration - No bridge layer - No shim layer - Build-flag controlled inclusion - Only the libbitcoin-relevant public-data entrypoints exposed - CPU fallback kept available, GPU hooks used when enabled/available ## Main links Integration guide: https://github.com/shrec/UltrafastSecp256k1/blob/dev/docs/LIBBITCOIN_INTEGRATION.md Public operations benchmark report: https://github.com/shrec/UltrafastSecp256k1/blob/dev/docs/LIBBITCOIN_PUBLIC_OPS_BENCHMARKS.md Public operations example: https://github.com/shrec/UltrafastSecp256k1/blob/dev/compat/libbitcoin_direct/examples/public_ops_example.cpp Public operations benchmark source: https://github.com/shrec/UltrafastSecp256k1/blob/dev/compat/libbitcoin_direct/bench/bench_public_ops.cpp Hash256 var GPU/direct report: https://github.com/shrec/UltrafastSecp256k1/blob/dev/docs/LIBBITCOIN_HASH256_VAR_GPU_REPORT.md Libbitcoin direct README: https://github.com/shrec/UltrafastSecp256k1/blob/dev/compat/libbitcoin_direct/README.md Current integration commit: https://github.com/shrec/UltrafastSecp256k1/commit/72b300d0561c3a2ccf371565e54630060b633f95 ## Covered libbitcoin-facing entrypoints The public direct C++ header now covers benchmark/example paths for: - `xonly_validate_batch` - `pubkey_validate_batch` - `taproot_commitment_verify_batch` - `tagged_hash_batch` - `tagged_hash_batch` tag-string overload - `tagged_hash_var_batch` - `hash256_batch` - `hash256_var_batch` The example target calls all of these through `<ufsecp/libbitcoin.hpp>`. ## Build flags For the direct libbitcoin package: ```bash cmake -S . -B out/libbitcoin-public-ops-bench -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DSECP256K1_BUILD_LIBBITCOIN=ON \ -DSECP256K1_BUILD_LIBBITCOIN_TESTS=ON \ -DSECP256K1_BUILD_LIBBITCOIN_BENCH=ON \ -DSECP256K1_BUILD_LIBBITCOIN_EXAMPLES=ON
cmake --build out/libbitcoin-public-ops-bench --target \ example_lbtc_public_ops \ bench_lbtc_public_ops \ bench_lbtc_hash256_var \ bench_lbtc_direct_batch \ test_lbtc_direct_verify \ test_lbtc_direct_operations -j
ctest --test-dir out/libbitcoin-public-ops-bench -R lbtc_direct --output-on-failure
out/libbitcoin-public-ops-bench/compat/libbitcoin_direct/example_lbtc_public_ops
example_lbtc_public_ops: PASS (direct C++, no C ABI/shim/bridge)
out/libbitcoin-public-ops-bench/compat/libbitcoin_direct/bench_lbtc_public_ops \ 8192 3 80 512 80 512 \ --json out/libbitcoin-public-ops-bench/lbtc_public_ops.json
out/libbitcoin-public-ops-bench/compat/libbitcoin_direct/bench_lbtc_hash256_var \ 262144 5 512 80 512 \ --json out/libbitcoin-public-ops-bench/lbtc_hash256_var.json
bench_lbtc_public_ops, production direct path:
operationthroughputxonly_validate0.15 M rows/spubkey_validate0.29 M rows/scommitment_verify0.04 M rows/stagged_hash9.39 M rows/stagged_hash_tag_overload9.42 M rows/stagged_hash_var4.46 M rows/shash2566.33 M rows/shash256_var4.11 M rows/s
bench_lbtc_hash256_var local baseline:
modethroughputpayload bandwidthns/rowserial reference4.60 M rows/s1296.68 MiB/s217.3direct CPU forced4.67 M rows/s1316.40 MiB/s214.0direct production4.64 M rows/s1307.02 MiB/s215.5
Validation completed locally
The following passed locally: