From d29b5ddf7586e564e5f440c7b9440b86a43e8f1e Mon Sep 17 00:00:00 2001 From: ludamad Date: Tue, 3 Sep 2024 15:18:49 +0000 Subject: [PATCH 1/8] Tracy gates --- barretenberg/cpp/CMakePresets.json | 20 +++++++++++++-- barretenberg/cpp/scripts/benchmark_tracy.sh | 25 ++++++++++++------- .../cpp/src/barretenberg/common/mem.cpp | 3 +++ .../cpp/src/barretenberg/common/mem.hpp | 13 +++++++++- .../arithmetization/arithmetization.hpp | 9 +++++++ .../arithmetization/mega_arithmetization.hpp | 1 + .../standard_arithmetization.hpp | 1 + .../arithmetization/ultra_arithmetization.hpp | 1 + 8 files changed, 61 insertions(+), 12 deletions(-) diff --git a/barretenberg/cpp/CMakePresets.json b/barretenberg/cpp/CMakePresets.json index da2154687a67..02ad94ce29d6 100644 --- a/barretenberg/cpp/CMakePresets.json +++ b/barretenberg/cpp/CMakePresets.json @@ -85,14 +85,25 @@ }, { "name": "tracy", - "displayName": "Release build with tracy", - "description": "Release build with tracy", + "displayName": "Release build with tracy, optimized for memory tracking", + "description": "Release build with tracy, optimized for memory tracking", "inherits": "clang16", "binaryDir": "build-tracy", "cacheVariables": { "ENABLE_TRACY": "ON" } }, + { + "name": "tracy-gates", + "displayName": "Release build with tracy - but hacked for gate tracking", + "description": "Release build with tracy - but hacker for gate tracking", + "inherits": "clang16", + "binaryDir": "build-tracy-gates", + "cacheVariables": { + "ENABLE_TRACY": "ON", + "CMAKE_CXX_FLAGS": "-DTRACY_HACK_GATES_AS_MEMORY" + } + }, { "name": "wasm-tracy", "displayName": "WASM build with tracy", @@ -435,6 +446,11 @@ "inherits": "default", "configurePreset": "tracy" }, + { + "name": "tracy-gates", + "inherits": "default", + "configurePreset": "tracy-gates" + }, { "name": "clang16-dbg-fast", "inherits": "default", diff --git a/barretenberg/cpp/scripts/benchmark_tracy.sh b/barretenberg/cpp/scripts/benchmark_tracy.sh index 4d9c2d3480e1..2e15ae90a5f7 100644 --- a/barretenberg/cpp/scripts/benchmark_tracy.sh +++ b/barretenberg/cpp/scripts/benchmark_tracy.sh @@ -1,29 +1,36 @@ # NOTE: intended to be ran from one's external computer, connecting to Aztec mainframe +# IF ON YOUR LOCAL COMPUTER USE NORMAL INTERACTIVE TRACY WORKFLOW # the benchmark runs with headless capture and then we copy the trace file and run tracy profiler # This is thus only really useful internally at Aztec, sorry external folks. It can be easily tweaked -# however for any SSH setup, especially an ubuntu one, and of course if you are just tracing on the -# same machine you can use the normal interactive tracy workflow. +# however for any SSH setup, especially an ubuntu one. +# on local machine run: +# export USER=... +# export PRESET=...tracy for memory or tracy-gates for circuit gates... +# ssh $USER-box "cat ~/aztec-packages/barretenberg/cpp/scripts/benchmark_tracy.sh" | bash /dev/stdin $USER set -eux -USER=$1 +USER=${1:-$USER} BOX=$USER-box -BENCHMARK=${2:-ultra_plonk_bench} -COMMAND=${3:-./bin/$BENCHMARK} +BENCHMARK=${2:-client_ivc_bench} +COMMAND=${3:-./bin/$BENCHMARK --benchmark_filter=ClientIVCBench/Full/6"\$"} + +# Can also set PRESET=tracy-gates env variable +PRESET=${PRESET:-tracy} ssh $BOX " set -eux ; ! [ -d ~/tracy ] && git clone https://github.com/wolfpld/tracy ~/tracy ; cd ~/tracy/capture ; - sudo apt-get install libdbus-1-dev libdbus-glib-1-dev ; + sudo apt-get install -y libdbus-1-dev libdbus-glib-1-dev ; mkdir -p build && cd build && cmake .. && make -j ; ./tracy-capture -a 127.0.0.1 -f -o trace-$BENCHMARK & ; sleep 0.1 ; cd ~/aztec-packages/barretenberg/cpp/ ; - cmake --preset tracy && cmake --build --preset tracy --parallel $BENCHMARK ; - cd build-tracy ; + cmake --preset $PRESET && cmake --build --preset $PRESET --target $BENCHMARK ; + cd build-$PRESET ; ninja $BENCHMARK ; $COMMAND ; -" +" || true ! [ -d ~/tracy ] && git clone https://github.com/wolfpld/tracy ~/tracy cd ~/tracy cmake -B profiler/build -S profiler -DCMAKE_BUILD_TYPE=Release diff --git a/barretenberg/cpp/src/barretenberg/common/mem.cpp b/barretenberg/cpp/src/barretenberg/common/mem.cpp index 24a2e14b2c5c..d6f4891ada7a 100644 --- a/barretenberg/cpp/src/barretenberg/common/mem.cpp +++ b/barretenberg/cpp/src/barretenberg/common/mem.cpp @@ -1,5 +1,6 @@ #include "barretenberg/common/mem.hpp" +#ifdef TRACY_ENABLE void* operator new(std::size_t count) { // NOLINTBEGIN(cppcoreguidelines-no-malloc) @@ -25,3 +26,5 @@ void operator delete(void* ptr, std::size_t size) noexcept free(ptr); // NOLINTEND(cppcoreguidelines-no-malloc) } + +#endif \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/common/mem.hpp b/barretenberg/cpp/src/barretenberg/common/mem.hpp index d07b85d5da91..752ee095baaa 100644 --- a/barretenberg/cpp/src/barretenberg/common/mem.hpp +++ b/barretenberg/cpp/src/barretenberg/common/mem.hpp @@ -7,9 +7,20 @@ #include // This can be altered to capture stack traces, though more expensive -// This is the only reason we wrap TracyAlloc or TracyAllocS +// so wrap TracyAlloc or TracyAllocS. We disable these if gates are being tracked +// Gates are hackishly tracked as if they were memory, for the sweet sweet memory +// stack tree that doesn't seem to be available for other metric types. +#ifndef TRACY_HACK_GATES_AS_MEMORY #define TRACY_ALLOC(t, size) TracyAllocS(t, size, /*stack depth*/ 10) #define TRACY_FREE(t) TracyFreeS(t, /*stack depth*/ 10) +#define TRACY_GATE_ALLOC(t) +#define TRACY_GATE_FREE(t) +#else +#define TRACY_ALLOC(t, size) +#define TRACY_FREE(t) +#define TRACY_GATE_ALLOC(t) TracyAllocS(reinterpret_cast(t), 1, /*stack depth*/ 10) +#define TRACY_GATE_FREE(t) TracyFreeS(reinterpret_cast(t), /*stack depth*/ 10) +#endif // #define TRACY_ALLOC(t, size) TracyAlloc(t, size) // #define TRACY_FREE(t) TracyFree(t) diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp index 5c6b56f66054..53bc5be967cc 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp @@ -1,4 +1,5 @@ #pragma once +#include "barretenberg/common/mem.hpp" #include "barretenberg/common/ref_array.hpp" #include "barretenberg/common/slab_allocator.hpp" #include @@ -76,6 +77,14 @@ template class ExecutionTr uint32_t get_fixed_size() const { return fixed_size; } void set_fixed_size(uint32_t size_in) { fixed_size = size_in; } +#ifdef TRACY_HACK_GATES_AS_MEMORY + ~ExecutionTraceBlock() + { + for (size_t j = 0; j < this->wires.size(); j++) { + TRACY_GATE_FREE(this + j); + } + } +#endif }; } // namespace bb \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/mega_arithmetization.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/mega_arithmetization.hpp index 0311301b6c69..a59f18a35d7f 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/mega_arithmetization.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/mega_arithmetization.hpp @@ -124,6 +124,7 @@ template class MegaArith { #ifdef CHECK_CIRCUIT_STACKTRACES this->stack_traces.populate(); #endif + TRACY_GATE_ALLOC(/*fake allocation*/ this + this->wires[0].size()); this->wires[0].emplace_back(idx_1); this->wires[1].emplace_back(idx_2); this->wires[2].emplace_back(idx_3); diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/standard_arithmetization.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/standard_arithmetization.hpp index e4cb58ea8a18..7a9d5ef63d03 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/standard_arithmetization.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/standard_arithmetization.hpp @@ -17,6 +17,7 @@ template class StandardArith { #ifdef CHECK_CIRCUIT_STACKTRACES this->stack_traces.populate(); #endif + TRACY_GATE_ALLOC(/*fake allocation*/ this + this->wires[0].size()); this->wires[0].emplace_back(idx_1); this->wires[1].emplace_back(idx_2); this->wires[2].emplace_back(idx_3); diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/ultra_arithmetization.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/ultra_arithmetization.hpp index 277ef866da95..591df7d4e64d 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/ultra_arithmetization.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/ultra_arithmetization.hpp @@ -63,6 +63,7 @@ template class UltraArith { #ifdef CHECK_CIRCUIT_STACKTRACES this->stack_traces.populate(); #endif + TRACY_GATE_ALLOC(/*fake allocation*/ this + this->wires[0].size()); this->wires[0].emplace_back(idx_1); this->wires[1].emplace_back(idx_2); this->wires[2].emplace_back(idx_3); From 5baf3cf6973969dd78c970212c086fdcc10e0322 Mon Sep 17 00:00:00 2001 From: ludamad Date: Thu, 5 Sep 2024 00:12:23 +0000 Subject: [PATCH 2/8] working --- barretenberg/cpp/scripts/benchmark_tracy.sh | 10 +++++----- .../cpp/src/barretenberg/common/mem.hpp | 9 +++++++-- .../arithmetization/arithmetization.hpp | 20 +++++++++++++++++-- .../arithmetization/mega_arithmetization.hpp | 2 +- .../standard_arithmetization.hpp | 2 +- .../arithmetization/ultra_arithmetization.hpp | 2 +- 6 files changed, 33 insertions(+), 12 deletions(-) diff --git a/barretenberg/cpp/scripts/benchmark_tracy.sh b/barretenberg/cpp/scripts/benchmark_tracy.sh index 2e15ae90a5f7..63f9f6367f62 100644 --- a/barretenberg/cpp/scripts/benchmark_tracy.sh +++ b/barretenberg/cpp/scripts/benchmark_tracy.sh @@ -19,18 +19,18 @@ PRESET=${PRESET:-tracy} ssh $BOX " set -eux ; + cd ~/aztec-packages/barretenberg/cpp/ ; + cmake --preset $PRESET && cmake --build --preset $PRESET --target $BENCHMARK ; ! [ -d ~/tracy ] && git clone https://github.com/wolfpld/tracy ~/tracy ; cd ~/tracy/capture ; sudo apt-get install -y libdbus-1-dev libdbus-glib-1-dev ; mkdir -p build && cd build && cmake .. && make -j ; ./tracy-capture -a 127.0.0.1 -f -o trace-$BENCHMARK & ; sleep 0.1 ; - cd ~/aztec-packages/barretenberg/cpp/ ; - cmake --preset $PRESET && cmake --build --preset $PRESET --target $BENCHMARK ; - cd build-$PRESET ; - ninja $BENCHMARK ; + cd ~/aztec-packages/barretenberg/cpp/build-$PRESET ; $COMMAND ; -" || true +" & +wait # TODO(AD) hack - not sure why needed ! [ -d ~/tracy ] && git clone https://github.com/wolfpld/tracy ~/tracy cd ~/tracy cmake -B profiler/build -S profiler -DCMAKE_BUILD_TYPE=Release diff --git a/barretenberg/cpp/src/barretenberg/common/mem.hpp b/barretenberg/cpp/src/barretenberg/common/mem.hpp index 752ee095baaa..2c04de0a8dac 100644 --- a/barretenberg/cpp/src/barretenberg/common/mem.hpp +++ b/barretenberg/cpp/src/barretenberg/common/mem.hpp @@ -10,6 +10,7 @@ // so wrap TracyAlloc or TracyAllocS. We disable these if gates are being tracked // Gates are hackishly tracked as if they were memory, for the sweet sweet memory // stack tree that doesn't seem to be available for other metric types. +#define TRACY_HACK_GATES_AS_MEMORY #ifndef TRACY_HACK_GATES_AS_MEMORY #define TRACY_ALLOC(t, size) TracyAllocS(t, size, /*stack depth*/ 10) #define TRACY_FREE(t) TracyFreeS(t, /*stack depth*/ 10) @@ -18,8 +19,12 @@ #else #define TRACY_ALLOC(t, size) #define TRACY_FREE(t) -#define TRACY_GATE_ALLOC(t) TracyAllocS(reinterpret_cast(t), 1, /*stack depth*/ 10) -#define TRACY_GATE_FREE(t) TracyFreeS(reinterpret_cast(t), /*stack depth*/ 10) + +namespace bb { +static size_t GLOBAL_GATE = 0; +} +#define TRACY_GATE_ALLOC(index) TracyAllocS(reinterpret_cast(index), 1, /*stack depth*/ 10) +#define TRACY_GATE_FREE(index) TracyFreeS(reinterpret_cast(index), /*stack depth*/ 10) #endif // #define TRACY_ALLOC(t, size) TracyAlloc(t, size) // #define TRACY_FREE(t) TracyFree(t) diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp index 53bc5be967cc..c427d13a9a7f 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp @@ -50,6 +50,17 @@ template class ExecutionTr // If enabled, we keep slow stack traces to be able to correlate gates with code locations where they were added StackTraces stack_traces; #endif +#ifdef TRACY_HACK_GATES_AS_MEMORY + std::vector allocated_gates; +#endif + void tracy_gate() + { +#ifdef TRACY_HACK_GATES_AS_MEMORY + GLOBAL_GATE++; + TRACY_GATE_ALLOC(GLOBAL_GATE); + allocated_gates.push_back(GLOBAL_GATE); +#endif + } Wires wires; // vectors of indices into a witness variables array Selectors selectors; @@ -80,9 +91,14 @@ template class ExecutionTr #ifdef TRACY_HACK_GATES_AS_MEMORY ~ExecutionTraceBlock() { - for (size_t j = 0; j < this->wires.size(); j++) { - TRACY_GATE_FREE(this + j); + for ([[maybe_unused]] size_t gate : allocated_gates) { + TRACY_GATE_FREE(gate); } + // std::ptrdiff_t n_untracked_gates = + // static_cast(this->wires.size()) - static_cast(allocated_gates.size()); + // if (n_untracked_gates > 0) { + // info("UNTRACKED GATES: ", n_untracked_gates); + // } } #endif }; diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/mega_arithmetization.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/mega_arithmetization.hpp index a59f18a35d7f..cca898f800ab 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/mega_arithmetization.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/mega_arithmetization.hpp @@ -124,7 +124,7 @@ template class MegaArith { #ifdef CHECK_CIRCUIT_STACKTRACES this->stack_traces.populate(); #endif - TRACY_GATE_ALLOC(/*fake allocation*/ this + this->wires[0].size()); + this->tracy_gate(); this->wires[0].emplace_back(idx_1); this->wires[1].emplace_back(idx_2); this->wires[2].emplace_back(idx_3); diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/standard_arithmetization.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/standard_arithmetization.hpp index 7a9d5ef63d03..b79dcdf443a4 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/standard_arithmetization.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/standard_arithmetization.hpp @@ -17,7 +17,7 @@ template class StandardArith { #ifdef CHECK_CIRCUIT_STACKTRACES this->stack_traces.populate(); #endif - TRACY_GATE_ALLOC(/*fake allocation*/ this + this->wires[0].size()); + this->tracy_gate(); this->wires[0].emplace_back(idx_1); this->wires[1].emplace_back(idx_2); this->wires[2].emplace_back(idx_3); diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/ultra_arithmetization.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/ultra_arithmetization.hpp index 591df7d4e64d..be4ca5b5fcbf 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/ultra_arithmetization.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/ultra_arithmetization.hpp @@ -63,7 +63,7 @@ template class UltraArith { #ifdef CHECK_CIRCUIT_STACKTRACES this->stack_traces.populate(); #endif - TRACY_GATE_ALLOC(/*fake allocation*/ this + this->wires[0].size()); + this->tracy_gate(); this->wires[0].emplace_back(idx_1); this->wires[1].emplace_back(idx_2); this->wires[2].emplace_back(idx_3); From 439ffa1f2e8279ed0c6aeca01ff5c525a338dc54 Mon Sep 17 00:00:00 2001 From: ludamad Date: Thu, 5 Sep 2024 00:12:39 +0000 Subject: [PATCH 3/8] cleanup --- .../plonk_honk_shared/arithmetization/arithmetization.hpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp index c427d13a9a7f..77c4bdab97ec 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp @@ -94,11 +94,6 @@ template class ExecutionTr for ([[maybe_unused]] size_t gate : allocated_gates) { TRACY_GATE_FREE(gate); } - // std::ptrdiff_t n_untracked_gates = - // static_cast(this->wires.size()) - static_cast(allocated_gates.size()); - // if (n_untracked_gates > 0) { - // info("UNTRACKED GATES: ", n_untracked_gates); - // } } #endif }; From 5088f2d6d295fd24752a0d48a61522970d411f50 Mon Sep 17 00:00:00 2001 From: ludamad Date: Wed, 4 Sep 2024 20:18:44 -0400 Subject: [PATCH 4/8] Update mem.hpp --- barretenberg/cpp/src/barretenberg/common/mem.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/common/mem.hpp b/barretenberg/cpp/src/barretenberg/common/mem.hpp index 2c04de0a8dac..214b6946c022 100644 --- a/barretenberg/cpp/src/barretenberg/common/mem.hpp +++ b/barretenberg/cpp/src/barretenberg/common/mem.hpp @@ -10,7 +10,6 @@ // so wrap TracyAlloc or TracyAllocS. We disable these if gates are being tracked // Gates are hackishly tracked as if they were memory, for the sweet sweet memory // stack tree that doesn't seem to be available for other metric types. -#define TRACY_HACK_GATES_AS_MEMORY #ifndef TRACY_HACK_GATES_AS_MEMORY #define TRACY_ALLOC(t, size) TracyAllocS(t, size, /*stack depth*/ 10) #define TRACY_FREE(t) TracyFreeS(t, /*stack depth*/ 10) @@ -124,4 +123,4 @@ inline void tracy_free(void* mem) TRACY_FREE(mem); // NOLINTNEXTLINE(cppcoreguidelines-owning-memory, cppcoreguidelines-no-malloc) free(mem); -} \ No newline at end of file +} From 0d512eb8bd8937f8b65c2ec3317447d8ab4a38ce Mon Sep 17 00:00:00 2001 From: ludamad Date: Thu, 5 Sep 2024 12:37:22 -0400 Subject: [PATCH 5/8] try pin tracy versions --- barretenberg/cpp/scripts/benchmark_tracy.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/barretenberg/cpp/scripts/benchmark_tracy.sh b/barretenberg/cpp/scripts/benchmark_tracy.sh index 63f9f6367f62..af6a28261f62 100644 --- a/barretenberg/cpp/scripts/benchmark_tracy.sh +++ b/barretenberg/cpp/scripts/benchmark_tracy.sh @@ -22,6 +22,7 @@ ssh $BOX " cd ~/aztec-packages/barretenberg/cpp/ ; cmake --preset $PRESET && cmake --build --preset $PRESET --target $BENCHMARK ; ! [ -d ~/tracy ] && git clone https://github.com/wolfpld/tracy ~/tracy ; + git checkout 075395620a504c0cdcaf9bab3d196db16a043de7 # release 0.11.0 cd ~/tracy/capture ; sudo apt-get install -y libdbus-1-dev libdbus-glib-1-dev ; mkdir -p build && cd build && cmake .. && make -j ; @@ -33,6 +34,7 @@ ssh $BOX " wait # TODO(AD) hack - not sure why needed ! [ -d ~/tracy ] && git clone https://github.com/wolfpld/tracy ~/tracy cd ~/tracy +git checkout 075395620a504c0cdcaf9bab3d196db16a043de7 # release 0.11.0 cmake -B profiler/build -S profiler -DCMAKE_BUILD_TYPE=Release cmake --build profiler/build --parallel scp $BOX:/mnt/user-data/$USER/tracy/capture/build/trace-$BENCHMARK . From c304f7a95af519cf700bca07736225c3ed63eb31 Mon Sep 17 00:00:00 2001 From: ludamad Date: Thu, 5 Sep 2024 16:45:45 +0000 Subject: [PATCH 6/8] fix --- barretenberg/cpp/scripts/benchmark_tracy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/barretenberg/cpp/scripts/benchmark_tracy.sh b/barretenberg/cpp/scripts/benchmark_tracy.sh index af6a28261f62..aa6f2f2800b6 100644 --- a/barretenberg/cpp/scripts/benchmark_tracy.sh +++ b/barretenberg/cpp/scripts/benchmark_tracy.sh @@ -22,8 +22,8 @@ ssh $BOX " cd ~/aztec-packages/barretenberg/cpp/ ; cmake --preset $PRESET && cmake --build --preset $PRESET --target $BENCHMARK ; ! [ -d ~/tracy ] && git clone https://github.com/wolfpld/tracy ~/tracy ; - git checkout 075395620a504c0cdcaf9bab3d196db16a043de7 # release 0.11.0 cd ~/tracy/capture ; + git checkout 075395620a504c0cdcaf9bab3d196db16a043de7 # release 0.11.0 sudo apt-get install -y libdbus-1-dev libdbus-glib-1-dev ; mkdir -p build && cd build && cmake .. && make -j ; ./tracy-capture -a 127.0.0.1 -f -o trace-$BENCHMARK & ; From 44ef2af62382be5a13cc05e51940b164a4da9403 Mon Sep 17 00:00:00 2001 From: ludamad Date: Thu, 5 Sep 2024 12:52:35 -0400 Subject: [PATCH 7/8] Update benchmark_tracy.sh --- barretenberg/cpp/scripts/benchmark_tracy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/barretenberg/cpp/scripts/benchmark_tracy.sh b/barretenberg/cpp/scripts/benchmark_tracy.sh index aa6f2f2800b6..e39f6517bbc3 100644 --- a/barretenberg/cpp/scripts/benchmark_tracy.sh +++ b/barretenberg/cpp/scripts/benchmark_tracy.sh @@ -23,7 +23,7 @@ ssh $BOX " cmake --preset $PRESET && cmake --build --preset $PRESET --target $BENCHMARK ; ! [ -d ~/tracy ] && git clone https://github.com/wolfpld/tracy ~/tracy ; cd ~/tracy/capture ; - git checkout 075395620a504c0cdcaf9bab3d196db16a043de7 # release 0.11.0 + git checkout 075395620a504c0cdcaf9bab3d196db16a043de7 ; sudo apt-get install -y libdbus-1-dev libdbus-glib-1-dev ; mkdir -p build && cd build && cmake .. && make -j ; ./tracy-capture -a 127.0.0.1 -f -o trace-$BENCHMARK & ; From 197f35961c83a31fbe26c0836af3500334aa4ecb Mon Sep 17 00:00:00 2001 From: ludamad Date: Thu, 5 Sep 2024 18:00:55 +0000 Subject: [PATCH 8/8] fixes for flakey tracing --- barretenberg/cpp/src/barretenberg/common/mem.hpp | 13 ++++++++++--- .../arithmetization/arithmetization.hpp | 7 ++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/common/mem.hpp b/barretenberg/cpp/src/barretenberg/common/mem.hpp index 214b6946c022..713161ec9b2f 100644 --- a/barretenberg/cpp/src/barretenberg/common/mem.hpp +++ b/barretenberg/cpp/src/barretenberg/common/mem.hpp @@ -16,14 +16,21 @@ #define TRACY_GATE_ALLOC(t) #define TRACY_GATE_FREE(t) #else +#include +#include #define TRACY_ALLOC(t, size) #define TRACY_FREE(t) namespace bb { +// These are hacks to make sure tracy plays along +// If we free an ID not allocated, or allocate an index twice without a free it will complain +// so we hack thread-safety and an incrementing global ID. +static std::mutex GLOBAL_GATE_MUTEX; static size_t GLOBAL_GATE = 0; -} -#define TRACY_GATE_ALLOC(index) TracyAllocS(reinterpret_cast(index), 1, /*stack depth*/ 10) -#define TRACY_GATE_FREE(index) TracyFreeS(reinterpret_cast(index), /*stack depth*/ 10) +static std::set FREED_GATES; // hack to prevent instrumentation failures +} // namespace bb +#define TRACY_GATE_ALLOC(index) TracyAllocS(reinterpret_cast(index), 1, /*stack depth*/ 50) +#define TRACY_GATE_FREE(index) TracyFreeS(reinterpret_cast(index), /*stack depth*/ 50) #endif // #define TRACY_ALLOC(t, size) TracyAlloc(t, size) // #define TRACY_FREE(t) TracyFree(t) diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp index 77c4bdab97ec..8f40ef2a8fd9 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/arithmetization/arithmetization.hpp @@ -56,6 +56,7 @@ template class ExecutionTr void tracy_gate() { #ifdef TRACY_HACK_GATES_AS_MEMORY + std::unique_lock lock(GLOBAL_GATE_MUTEX); GLOBAL_GATE++; TRACY_GATE_ALLOC(GLOBAL_GATE); allocated_gates.push_back(GLOBAL_GATE); @@ -91,8 +92,12 @@ template class ExecutionTr #ifdef TRACY_HACK_GATES_AS_MEMORY ~ExecutionTraceBlock() { + std::unique_lock lock(GLOBAL_GATE_MUTEX); for ([[maybe_unused]] size_t gate : allocated_gates) { - TRACY_GATE_FREE(gate); + if (!FREED_GATES.contains(gate)) { + TRACY_GATE_FREE(gate); + FREED_GATES.insert(gate); + } } } #endif