From 50f89f1832154d526908c55ab296aaf9bacf3608 Mon Sep 17 00:00:00 2001 From: ludamad Date: Fri, 23 Feb 2024 10:58:29 +0000 Subject: [PATCH] refactor: remove WASMTIME_ENV_HACK (#4714) Closes https://github.com/AztecProtocol/barretenberg/issues/837 Co-authored-by: ludamad --- barretenberg/cpp/CMakePresets.json | 16 ---------- .../cpp/scripts/_benchmark_remote_lock.sh | 1 + barretenberg/cpp/scripts/benchmark_remote.sh | 3 +- barretenberg/cpp/scripts/benchmark_wasm.sh | 9 +++--- .../cpp/scripts/benchmark_wasm_remote.sh | 15 ++++++--- .../barretenberg/env/hardware_concurrency.cpp | 12 +++---- .../cpp/src/barretenberg/srs/global_crs.cpp | 32 ------------------- 7 files changed, 22 insertions(+), 66 deletions(-) diff --git a/barretenberg/cpp/CMakePresets.json b/barretenberg/cpp/CMakePresets.json index 67b3ad028e0..002a19d456c 100644 --- a/barretenberg/cpp/CMakePresets.json +++ b/barretenberg/cpp/CMakePresets.json @@ -274,16 +274,6 @@ "MULTITHREADING": "ON" } }, - { - "name": "wasm-bench", - "displayName": "WASM benchmarking.", - "description": "WASM benchmarking.", - "inherits": "wasm-threads", - "binaryDir": "build-wasm-bench", - "environment": { - "CXXFLAGS": "-DWASMTIME_ENV_HACK" - } - }, { "name": "xray", "displayName": "Build with multi-threaded XRay Profiling", @@ -444,12 +434,6 @@ "jobs": 0, "targets": ["barretenberg.wasm"] }, - { - "name": "wasm-bench", - "configurePreset": "wasm-bench", - "inheritConfigureEnvironment": true, - "jobs": 0 - }, { "name": "xray", "configurePreset": "xray", diff --git a/barretenberg/cpp/scripts/_benchmark_remote_lock.sh b/barretenberg/cpp/scripts/_benchmark_remote_lock.sh index 551a26b9070..8ed0787051a 100644 --- a/barretenberg/cpp/scripts/_benchmark_remote_lock.sh +++ b/barretenberg/cpp/scripts/_benchmark_remote_lock.sh @@ -23,5 +23,6 @@ echo "Benchmarking lock created at ~/BENCHMARK_IN_PROGRESS." # Trap to ensure cleanup runs on ANY exit, including from a signal trap cleanup EXIT +trap cleanup INT # handle ctrl-c # don't exit, the caller script will run \ No newline at end of file diff --git a/barretenberg/cpp/scripts/benchmark_remote.sh b/barretenberg/cpp/scripts/benchmark_remote.sh index 05a61392584..b892d505ffb 100755 --- a/barretenberg/cpp/scripts/benchmark_remote.sh +++ b/barretenberg/cpp/scripts/benchmark_remote.sh @@ -11,6 +11,7 @@ BENCHMARK=${1:-goblin_bench} COMMAND=${2:-./$BENCHMARK} PRESET=${3:-clang16} BUILD_DIR=${4:-build} +HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} # Move above script dir. cd $(dirname $0)/.. @@ -24,4 +25,4 @@ source scripts/_benchmark_remote_lock.sh cd $BUILD_DIR scp $BB_SSH_KEY ./bin/$BENCHMARK $BB_SSH_INSTANCE:$BB_SSH_CPP_PATH/build ssh $BB_SSH_KEY $BB_SSH_INSTANCE \ - "cd $BB_SSH_CPP_PATH/build ; $COMMAND" + "cd $BB_SSH_CPP_PATH/build ; HARDWARE_CONCURRENCY=$HARDWARE_CONCURRENCY $COMMAND" diff --git a/barretenberg/cpp/scripts/benchmark_wasm.sh b/barretenberg/cpp/scripts/benchmark_wasm.sh index a7565485bdf..91f5d25b2c4 100755 --- a/barretenberg/cpp/scripts/benchmark_wasm.sh +++ b/barretenberg/cpp/scripts/benchmark_wasm.sh @@ -3,15 +3,16 @@ set -eu BENCHMARK=${1:-goblin_bench} COMMAND=${2:-./bin/$BENCHMARK} +HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} # Move above script dir. cd $(dirname $0)/.. # Configure and build. -cmake --preset wasm-bench -cmake --build --preset wasm-bench --target $BENCHMARK +cmake --preset wasm-threads +cmake --build --preset wasm-threads --target $BENCHMARK -cd build-wasm-bench +cd build-wasm-threads # Consistency with _wasm.sh targets / shorter $COMMAND. cp ./bin/$BENCHMARK . -wasmtime run -Wthreads=y -Sthreads=y $COMMAND \ No newline at end of file +wasmtime run --env HARDWARE_CONCURRENCY=$HARDWARE_CONCURRENCY -Wthreads=y -Sthreads=y --dir=.. $COMMAND \ No newline at end of file diff --git a/barretenberg/cpp/scripts/benchmark_wasm_remote.sh b/barretenberg/cpp/scripts/benchmark_wasm_remote.sh index f131cc63a6f..62213556579 100755 --- a/barretenberg/cpp/scripts/benchmark_wasm_remote.sh +++ b/barretenberg/cpp/scripts/benchmark_wasm_remote.sh @@ -9,17 +9,22 @@ set -eu BENCHMARK=${1:-goblin_bench} COMMAND=${2:-./$BENCHMARK} +HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} # Move above script dir. cd $(dirname $0)/.. # Configure and build. -cmake --preset wasm-bench -cmake --build --preset wasm-bench --target $BENCHMARK +cmake --preset wasm-threads +cmake --build --preset wasm-threads --target $BENCHMARK source scripts/_benchmark_remote_lock.sh -cd build-wasm-bench -scp $BB_SSH_KEY ./bin/$BENCHMARK $BB_SSH_INSTANCE:$BB_SSH_CPP_PATH/build-wasm-bench +cd build-wasm-threads +# ensure folder structure +ssh $BB_SSH_KEY $BB_SSH_INSTANCE "mkdir -p $BB_SSH_CPP_PATH/build-wasm-threads" +# copy build wasm threads +scp $BB_SSH_KEY ./bin/$BENCHMARK $BB_SSH_INSTANCE:$BB_SSH_CPP_PATH/build-wasm-threads +# run wasm benchmarking ssh $BB_SSH_KEY $BB_SSH_INSTANCE \ - "cd $BB_SSH_CPP_PATH/build-wasm-bench ; /home/ubuntu/.wasmtime/bin/wasmtime run -Wthreads=y -Sthreads=y $COMMAND" + "cd $BB_SSH_CPP_PATH/build-wasm-threads ; /home/ubuntu/.wasmtime/bin/wasmtime run --env HARDWARE_CONCURRENCY=$HARDWARE_CONCURRENCY -Wthreads=y -Sthreads=y --dir=.. $COMMAND" diff --git a/barretenberg/cpp/src/barretenberg/env/hardware_concurrency.cpp b/barretenberg/cpp/src/barretenberg/env/hardware_concurrency.cpp index 7814a02e406..9217e014eb9 100644 --- a/barretenberg/cpp/src/barretenberg/env/hardware_concurrency.cpp +++ b/barretenberg/cpp/src/barretenberg/env/hardware_concurrency.cpp @@ -1,6 +1,7 @@ #include "hardware_concurrency.hpp" #include #include +#include #include #include #include @@ -12,14 +13,9 @@ uint32_t env_hardware_concurrency() #ifndef __wasm__ try { #endif -#ifdef WASMTIME_ENV_HACK - // TODO(https://github.com/AztecProtocol/barretenberg/issues/837): Undo this hack, rely on WASI. - return 16; -#else - static auto val = std::getenv("HARDWARE_CONCURRENCY"); - static const uint32_t cores = val ? (uint32_t)std::stoul(val) : std::thread::hardware_concurrency(); - return cores; -#endif + static auto val = std::getenv("HARDWARE_CONCURRENCY"); + static const uint32_t cores = val ? (uint32_t)std::stoul(val) : std::thread::hardware_concurrency(); + return cores; #ifndef __wasm__ } catch (std::exception const&) { throw std::runtime_error("HARDWARE_CONCURRENCY invalid."); diff --git a/barretenberg/cpp/src/barretenberg/srs/global_crs.cpp b/barretenberg/cpp/src/barretenberg/srs/global_crs.cpp index fcfbac3e30c..0d09ee6c2e9 100644 --- a/barretenberg/cpp/src/barretenberg/srs/global_crs.cpp +++ b/barretenberg/cpp/src/barretenberg/srs/global_crs.cpp @@ -24,23 +24,7 @@ void init_crs_factory(std::string crs_path) if (crs_factory != nullptr) { return; } -#ifdef WASMTIME_ENV_HACK - static_cast(crs_path); - // We only need this codepath in wasmtime because the SRS cannot be loaded in our usual ways - // and we don't need a real CRS for our purposes. - // TODO(https://github.com/AztecProtocol/barretenberg/issues/837): make this a real SRS. - std::cout << "WASMTIME_ENV_HACK: started generating fake bn254 curve" << std::endl; - std::vector points; - // 2**19 points - points.reserve(1 << 19); - for (int i = 0; i < (1 << 19); i++) { - points.push_back(g1::affine_element::random_element()); - } - init_crs_factory(points, g2::affine_element{ fq::random_element(), fq::random_element() }); - std::cout << "WASMTIME_ENV_HACK: finished generating fake bn254 curve" << std::endl; -#else crs_factory = std::make_shared>(crs_path); -#endif } // Initializes the crs using the memory buffers @@ -54,23 +38,7 @@ void init_grumpkin_crs_factory(std::string crs_path) if (grumpkin_crs_factory != nullptr) { return; } -#ifdef WASMTIME_ENV_HACK - // We only need this codepath in wasmtime because the SRS cannot be loaded in our usual ways - // and we don't need a real CRS for our purposes. - // TODO(https://github.com/AztecProtocol/barretenberg/issues/837): make this a real SRS. - static_cast(crs_path); - std::cout << "WASMTIME_ENV_HACK: started generating fake grumpkin curve" << std::endl; - std::vector points; - // 2**18 points - points.reserve(1 << 18); - for (int i = 0; i < (1 << 18); i++) { - points.push_back(curve::Grumpkin::AffineElement::random_element()); - } - std::cout << "WASMTIME_ENV_HACK: finished generating fake grumpkin curve" << std::endl; - init_grumpkin_crs_factory(points); -#else grumpkin_crs_factory = std::make_shared>(crs_path); -#endif } std::shared_ptr> get_crs_factory()