From 342f62cbef89f3e59cd2cfd0ed801383a07c29fd Mon Sep 17 00:00:00 2001 From: Michael McLeod Date: Wed, 2 Apr 2025 14:14:10 +0100 Subject: [PATCH 1/5] Use static variables to avoid recalculating the norm --- cpp/benchmarks/stochastic_algorithm.cc | 66 ++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/cpp/benchmarks/stochastic_algorithm.cc b/cpp/benchmarks/stochastic_algorithm.cc index b43671d9..218d8d09 100644 --- a/cpp/benchmarks/stochastic_algorithm.cc +++ b/cpp/benchmarks/stochastic_algorithm.cc @@ -120,6 +120,64 @@ BENCHMARK_DEFINE_F(StochasticAlgoFixture, ForwardBackward)(benchmark::State &sta } } +BENCHMARK_DEFINE_F(StochasticAlgoFixture, ForwardBackwardApproxNorm)(benchmark::State &state) { + // This functor would be defined in Purify + std::function>>()> random_updater = + [this]() { + H5::H5Handler h5file(m_input_data_path, m_world); + utilities::vis_params uv_data = H5::stochread_visibility(h5file, m_N, false); + uv_data.units = utilities::vis_units::radians; + auto phi = factory::measurement_operator_factory>( + factory::distributed_measurement_operator::mpi_distribute_image, uv_data, m_imsizex, + m_imsizey, 1, 1, 2, kernels::kernel_from_string.at("kb"), 4, 4); + + // declaration of static variables to avoid recalculating the normalisation + static auto const power_method_stuff = sopt::algorithm::power_method>( + *phi, 1000, 1e-5, + m_world.broadcast(Vector::Ones(m_imsizex * m_imsizey).eval())); + + static const t_real op_norm = std::get<0>(power_method_stuff); + + // set the normalisation of the new phi + phi->set_norm(op_norm); + + return std::make_shared>>(uv_data.vis, phi); + }; + + // wavelets + auto const wavelets = factory::wavelet_operator_factory>( + factory::distributed_wavelet_operator::serial, m_sara, m_imsizey, m_imsizex); + + // algorithm + sopt::algorithm::ImagingForwardBackward fb(random_updater); + fb.itermax(state.range(2)) + .step_size(m_beta * sqrt(2)) + .sigma(m_sigma * sqrt(2)) + .regulariser_strength(m_gamma) + .relative_variation(1e-3) + .residual_tolerance(0) + .tight_frame(true) + .obj_comm(m_world); + + auto gp = std::make_shared>(false); + gp->l1_proximal_tolerance(1e-4) + .l1_proximal_nu(1) + .l1_proximal_itermax(50) + .l1_proximal_positivity_constraint(true) + .l1_proximal_real_constraint(true) + .Psi(*wavelets); + fb.g_function(gp); + + PURIFY_INFO("Start iteration loop"); + + while (state.KeepRunning()) { + auto start = std::chrono::high_resolution_clock::now(); + fb(); + auto end = std::chrono::high_resolution_clock::now(); + state.SetIterationTime(b_utilities::duration(start, end, m_world)); + } +} + BENCHMARK_REGISTER_F(StochasticAlgoFixture, ForwardBackward) ->Args({128, 10000, 10}) ->UseManualTime() @@ -127,3 +185,11 @@ BENCHMARK_REGISTER_F(StochasticAlgoFixture, ForwardBackward) ->MinWarmUpTime(5.0) ->Repetitions(3) //->ReportAggregatesOnly(true) ->Unit(benchmark::kMillisecond); + +BENCHMARK_REGISTER_F(StochasticAlgoFixture, ForwardBackwardApproxNorm) + ->Args({128, 10000, 10}) + ->UseManualTime() + ->MinTime(60.0) + ->MinWarmUpTime(5.0) + ->Repetitions(3) //->ReportAggregatesOnly(true) + ->Unit(benchmark::kMillisecond); \ No newline at end of file From 5e39f6b921a55c255daca525b96a0743ac359d3a Mon Sep 17 00:00:00 2001 From: Michael McLeod Date: Wed, 2 Apr 2025 14:17:41 +0100 Subject: [PATCH 2/5] Utterly pointless linting --- cpp/benchmarks/stochastic_algorithm.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/benchmarks/stochastic_algorithm.cc b/cpp/benchmarks/stochastic_algorithm.cc index 218d8d09..a63e9f2f 100644 --- a/cpp/benchmarks/stochastic_algorithm.cc +++ b/cpp/benchmarks/stochastic_algorithm.cc @@ -137,7 +137,7 @@ BENCHMARK_DEFINE_F(StochasticAlgoFixture, ForwardBackwardApproxNorm)(benchmark:: m_world.broadcast(Vector::Ones(m_imsizex * m_imsizey).eval())); static const t_real op_norm = std::get<0>(power_method_stuff); - + // set the normalisation of the new phi phi->set_norm(op_norm); From 1518552de26ab12cd4c761fb9bfd5ceae162fb9b Mon Sep 17 00:00:00 2001 From: Tuomas Koskela Date: Wed, 2 Apr 2025 16:06:11 +0100 Subject: [PATCH 3/5] Fix cmake version to <4.0 to work around issue on github actions --- .github/workflows/ci.yml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0b40e553..50512ebc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -63,6 +63,11 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Setup cmake + uses: jwlawson/actions-setup-cmake@v2 + with: + cmake-version: '3.31.6' + # Enable tmate debugging of manually-triggered workflows if the input option was provided - name: Setup tmate session uses: mxschmitt/action-tmate@v3 @@ -203,6 +208,11 @@ jobs: with: name: dependencies-${{ matrix.os }}-${{ matrix.cxx }}-${{ matrix.mpi }}-${{ matrix.omp }} + - name: Setup cmake + uses: jwlawson/actions-setup-cmake@v2 + with: + cmake-version: '3.31.6' + - name: Unpack dependencies run: tar xfv dependencies.tar @@ -284,6 +294,11 @@ jobs: with: name: dependencies-${{ matrix.os }}-${{ matrix.cxx }}-${{ matrix.mpi }}-${{ matrix.omp }} + - name: Setup cmake + uses: jwlawson/actions-setup-cmake@v2 + with: + cmake-version: '3.31.6' + - name: Unpack dependencies run: tar xfv dependencies.tar - name: Install Dependencies on Ubunutu @@ -312,7 +327,7 @@ jobs: cmake .. --fresh -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local -Donnxrt=ON -Dhdf5=ON -Ddocasa=OFF -Ddompi=${{matrix.mpi}} -Dopenmp=${{matrix.omp}} -Dtests=OFF -Dexamples=ON -Dbenchmarks=ON make -j$(nproc --ignore 1) install - + doc: needs: dependencies @@ -341,6 +356,11 @@ jobs: with: name: dependencies-${{ matrix.os }}-${{ matrix.cxx }}-${{ matrix.mpi }}-${{ matrix.omp }} + - name: Setup cmake + uses: jwlawson/actions-setup-cmake@v2 + with: + cmake-version: '3.31.6' + - name: Unpack dependencies run: tar xfv dependencies.tar From 312375f97cda44634408cde970031e0d8b1e540b Mon Sep 17 00:00:00 2001 From: Tuomas Koskela Date: Wed, 2 Apr 2025 16:08:54 +0100 Subject: [PATCH 4/5] indentation --- .github/workflows/ci.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 50512ebc..52b2ca4d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,9 +64,9 @@ jobs: - uses: actions/checkout@v4 - name: Setup cmake - uses: jwlawson/actions-setup-cmake@v2 - with: - cmake-version: '3.31.6' + uses: jwlawson/actions-setup-cmake@v2 + with: + cmake-version: '3.31.6' # Enable tmate debugging of manually-triggered workflows if the input option was provided - name: Setup tmate session @@ -209,9 +209,9 @@ jobs: name: dependencies-${{ matrix.os }}-${{ matrix.cxx }}-${{ matrix.mpi }}-${{ matrix.omp }} - name: Setup cmake - uses: jwlawson/actions-setup-cmake@v2 - with: - cmake-version: '3.31.6' + uses: jwlawson/actions-setup-cmake@v2 + with: + cmake-version: '3.31.6' - name: Unpack dependencies run: tar xfv dependencies.tar @@ -295,9 +295,9 @@ jobs: name: dependencies-${{ matrix.os }}-${{ matrix.cxx }}-${{ matrix.mpi }}-${{ matrix.omp }} - name: Setup cmake - uses: jwlawson/actions-setup-cmake@v2 - with: - cmake-version: '3.31.6' + uses: jwlawson/actions-setup-cmake@v2 + with: + cmake-version: '3.31.6' - name: Unpack dependencies run: tar xfv dependencies.tar From f1361f974724ce64521031ff307174e0c8f10c98 Mon Sep 17 00:00:00 2001 From: Tuomas Koskela Date: Wed, 2 Apr 2025 16:12:05 +0100 Subject: [PATCH 5/5] One more --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 52b2ca4d..6febafd4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -357,9 +357,9 @@ jobs: name: dependencies-${{ matrix.os }}-${{ matrix.cxx }}-${{ matrix.mpi }}-${{ matrix.omp }} - name: Setup cmake - uses: jwlawson/actions-setup-cmake@v2 - with: - cmake-version: '3.31.6' + uses: jwlawson/actions-setup-cmake@v2 + with: + cmake-version: '3.31.6' - name: Unpack dependencies run: tar xfv dependencies.tar