Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: remove WASMTIME_ENV_HACK #4714

Merged
merged 13 commits into from
Feb 23, 2024
16 changes: 0 additions & 16 deletions barretenberg/cpp/CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -444,12 +434,6 @@
"jobs": 0,
"targets": ["barretenberg.wasm"]
},
{
"name": "wasm-bench",
"configurePreset": "wasm-bench",
"inheritConfigureEnvironment": true,
"jobs": 0
},
{
"name": "xray",
"configurePreset": "xray",
Expand Down
1 change: 1 addition & 0 deletions barretenberg/cpp/scripts/_benchmark_remote_lock.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
3 changes: 2 additions & 1 deletion barretenberg/cpp/scripts/benchmark_remote.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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)/..
Expand All @@ -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"
9 changes: 5 additions & 4 deletions barretenberg/cpp/scripts/benchmark_wasm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
wasmtime run --env HARDWARE_CONCURRENCY=$HARDWARE_CONCURRENCY -Wthreads=y -Sthreads=y --dir=.. $COMMAND
15 changes: 10 additions & 5 deletions barretenberg/cpp/scripts/benchmark_wasm_remote.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
12 changes: 4 additions & 8 deletions barretenberg/cpp/src/barretenberg/env/hardware_concurrency.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "hardware_concurrency.hpp"
#include <barretenberg/common/throw_or_abort.hpp>
#include <cstdlib>
#include <iostream>
#include <stdexcept>
#include <string>
#include <thread>
Expand All @@ -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.");
Expand Down
32 changes: 0 additions & 32 deletions barretenberg/cpp/src/barretenberg/srs/global_crs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,23 +24,7 @@ void init_crs_factory(std::string crs_path)
if (crs_factory != nullptr) {
return;
}
#ifdef WASMTIME_ENV_HACK
static_cast<void>(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<g1::affine_element> 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<factories::FileCrsFactory<curve::BN254>>(crs_path);
#endif
}

// Initializes the crs using the memory buffers
Expand All @@ -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<void>(crs_path);
std::cout << "WASMTIME_ENV_HACK: started generating fake grumpkin curve" << std::endl;
std::vector<curve::Grumpkin::AffineElement> 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<factories::FileCrsFactory<curve::Grumpkin>>(crs_path);
#endif
}

std::shared_ptr<factories::CrsFactory<curve::BN254>> get_crs_factory()
Expand Down
Loading