PURIFY
Next-generation radio interferometric imaging
Classes | Functions
algorithms_mpi.cc File Reference
#include "purify/types.h"
#include <array>
#include <random>
#include "benchmarks/utilities.h"
#include "purify/algorithm_factory.h"
#include "purify/convergence_factory.h"
#include "purify/directories.h"
#include "purify/distribute.h"
#include "purify/logging.h"
#include "purify/measurement_operator_factory.h"
#include "purify/mpi_utilities.h"
#include "purify/operators.h"
#include "purify/utilities.h"
#include "purify/wavelet_operator_factory.h"
#include <sopt/imaging_padmm.h>
#include <sopt/mpi/communicator.h>
#include <sopt/mpi/session.h>
#include <sopt/relative_variation.h>
#include <sopt/utilities.h>
#include <sopt/wavelets.h>
#include <sopt/wavelets/sara.h>
+ Include dependency graph for algorithms_mpi.cc:

Go to the source code of this file.

Classes

class  AlgoFixtureMPI
 

Functions

 BENCHMARK_DEFINE_F (AlgoFixtureMPI, PadmmDistributeImage)(benchmark
 
 BENCHMARK_DEFINE_F (AlgoFixtureMPI, PadmmDistributeGrid)(benchmark
 
 BENCHMARK_DEFINE_F (AlgoFixtureMPI, FbDistributeImage)(benchmark
 
 BENCHMARK_DEFINE_F (AlgoFixtureMPI, FbDistributeGrid)(benchmark
 
 Args ({128, 10000, 4, 10, 1}) -> Args({1024, static_cast< t_int >(1e6), 4, 10, 1}) ->Args({1024, static_cast< t_int >(1e7), 4, 10, 1}) ->Args({2048, static_cast< t_int >(1e6), 4, 10, 1}) ->Args({2048, static_cast< t_int >(1e7), 4, 10, 1}) ->Args({4096, static_cast< t_int >(1e6), 4, 10, 1}) ->Args({4096, static_cast< t_int >(1e7), 4, 10, 1}) ->UseManualTime() ->MinTime(60.0) ->MinWarmUpTime(10.0) ->Repetitions(3) ->Unit(benchmark::kMillisecond)
 
 Args ({128, 10000, 4, 10, 2}) -> Args({1024, static_cast< t_int >(1e6), 4, 10, 2}) ->Args({1024, static_cast< t_int >(1e7), 4, 10, 2}) ->Args({2048, static_cast< t_int >(1e6), 4, 10, 2}) ->Args({2048, static_cast< t_int >(1e7), 4, 10, 2}) ->Args({4096, static_cast< t_int >(1e6), 4, 10, 2}) ->Args({4096, static_cast< t_int >(1e7), 4, 10, 2}) ->UseManualTime() ->MinTime(60.0) ->MinWarmUpTime(10.0) ->Repetitions(3) ->Unit(benchmark::kMillisecond)
 

Function Documentation

◆ Args() [1/2]

Args ( {128, 10000, 4, 10, 1}  ) -> Args({1024, static_cast< t_int >(1e6), 4, 10, 1}) ->Args({1024, static_cast< t_int >(1e7), 4, 10, 1}) ->Args({2048, static_cast< t_int >(1e6), 4, 10, 1}) ->Args({2048, static_cast< t_int >(1e7), 4, 10, 1}) ->Args({4096, static_cast< t_int >(1e6), 4, 10, 1}) ->Args({4096, static_cast< t_int >(1e7), 4, 10, 1}) ->UseManualTime() ->MinTime(60.0) ->MinWarmUpTime(10.0) ->Repetitions(3) ->Unit(benchmark::kMillisecond)

◆ Args() [2/2]

Args ( {128, 10000, 4, 10, 2}  ) -> Args({1024, static_cast< t_int >(1e6), 4, 10, 2}) ->Args({1024, static_cast< t_int >(1e7), 4, 10, 2}) ->Args({2048, static_cast< t_int >(1e6), 4, 10, 2}) ->Args({2048, static_cast< t_int >(1e7), 4, 10, 2}) ->Args({4096, static_cast< t_int >(1e6), 4, 10, 2}) ->Args({4096, static_cast< t_int >(1e7), 4, 10, 2}) ->UseManualTime() ->MinTime(60.0) ->MinWarmUpTime(10.0) ->Repetitions(3) ->Unit(benchmark::kMillisecond)

◆ BENCHMARK_DEFINE_F() [1/4]

BENCHMARK_DEFINE_F ( AlgoFixtureMPI  ,
FbDistributeGrid   
)

Definition at line 150 of file algorithms_mpi.cc.

150  {
151  // Create the algorithm - has to be done there to reset the internal state.
152  // If done in the fixture repeats would start at the solution and converge immediately.
153  auto const wavelets = factory::wavelet_operator_factory<Vector<t_complex>>(
154  factory::distributed_wavelet_operator::mpi_sara, m_sara, m_imsizey, m_imsizex);
155 
156  t_real const beta = m_sigma * m_sigma;
157  t_real const gamma = 0.0001;
158 
159  m_fb = factory::fb_factory<sopt::algorithm::ImagingForwardBackward<t_complex>>(
160  factory::algo_distribution::mpi_serial, m_measurements_distribute_grid, wavelets, m_uv_data,
161  m_sigma, beta, gamma, m_imsizey, m_imsizex, m_sara.size(), state.range(3), true, true, false,
162  1e-3, 1e-2, 50);
163 
164  // Benchmark the application of the algorithm
165  while (state.KeepRunning()) {
166  auto start = std::chrono::high_resolution_clock::now();
167  auto result = (*m_fb)();
168  auto end = std::chrono::high_resolution_clock::now();
169  std::cout << "Converged? " << result.good << " , niters = " << result.niters << std::endl;
170  state.SetIterationTime(b_utilities::duration(start, end, m_world));
171  }
172 }
double duration(std::chrono::high_resolution_clock::time_point start, std::chrono::high_resolution_clock::time_point end)
Definition: utilities.cc:26

References b_utilities::duration(), purify::factory::mpi_sara, and purify::factory::mpi_serial.

◆ BENCHMARK_DEFINE_F() [2/4]

BENCHMARK_DEFINE_F ( AlgoFixtureMPI  ,
FbDistributeImage   
)

Definition at line 126 of file algorithms_mpi.cc.

126  {
127  // Create the algorithm - has to be done there to reset the internal state.
128  // If done in the fixture repeats would start at the solution and converge immediately.
129  auto const wavelets = factory::wavelet_operator_factory<Vector<t_complex>>(
130  factory::distributed_wavelet_operator::mpi_sara, m_sara, m_imsizey, m_imsizex);
131 
132  t_real const beta = m_sigma * m_sigma;
133  t_real const gamma = 0.0001;
134 
135  m_fb = factory::fb_factory<sopt::algorithm::ImagingForwardBackward<t_complex>>(
136  factory::algo_distribution::mpi_serial, m_measurements_distribute_image, wavelets, m_uv_data,
137  m_sigma, beta, gamma, m_imsizey, m_imsizex, m_sara.size(), state.range(3), true, true, false,
138  1e-3, 1e-2, 50);
139 
140  // Benchmark the application of the algorithm
141  while (state.KeepRunning()) {
142  auto start = std::chrono::high_resolution_clock::now();
143  auto result = (*m_fb)();
144  auto end = std::chrono::high_resolution_clock::now();
145  std::cout << "Converged? " << result.good << " , niters = " << result.niters << std::endl;
146  state.SetIterationTime(b_utilities::duration(start, end, m_world));
147  }
148 }

References b_utilities::duration(), purify::factory::mpi_sara, and purify::factory::mpi_serial.

◆ BENCHMARK_DEFINE_F() [3/4]

BENCHMARK_DEFINE_F ( AlgoFixtureMPI  ,
PadmmDistributeGrid   
)

Definition at line 105 of file algorithms_mpi.cc.

105  {
106  // Create the algorithm - has to be done there to reset the internal state.
107  // If done in the fixture repeats would start at the solution and converge immediately.
108  auto const wavelets = factory::wavelet_operator_factory<Vector<t_complex>>(
109  factory::distributed_wavelet_operator::mpi_sara, m_sara, m_imsizey, m_imsizex);
110 
111  m_padmm = factory::padmm_factory<sopt::algorithm::ImagingProximalADMM<t_complex>>(
112  factory::algo_distribution::mpi_distributed, m_measurements_distribute_grid, wavelets,
113  m_uv_data, m_sigma, m_imsizey, m_imsizex, m_sara.size(), state.range(3) + 1, true, true,
114  false, 1e-3, 1e-2, 50);
115 
116  // Benchmark the application of the algorithm
117  while (state.KeepRunning()) {
118  auto start = std::chrono::high_resolution_clock::now();
119  auto result = (*m_padmm)();
120  auto end = std::chrono::high_resolution_clock::now();
121  std::cout << "Converged? " << result.good << " , niters = " << result.niters << std::endl;
122  state.SetIterationTime(b_utilities::duration(start, end, m_world));
123  }
124 }

References b_utilities::duration(), purify::factory::mpi_distributed, and purify::factory::mpi_sara.

◆ BENCHMARK_DEFINE_F() [4/4]

BENCHMARK_DEFINE_F ( AlgoFixtureMPI  ,
PadmmDistributeImage   
)

Definition at line 84 of file algorithms_mpi.cc.

84  {
85  // Create the algorithm - has to be done there to reset the internal state.
86  // If done in the fixture repeats would start at the solution and converge immediately.
87  auto const wavelets = factory::wavelet_operator_factory<Vector<t_complex>>(
88  factory::distributed_wavelet_operator::mpi_sara, m_sara, m_imsizey, m_imsizex);
89 
90  m_padmm = factory::padmm_factory<sopt::algorithm::ImagingProximalADMM<t_complex>>(
91  factory::algo_distribution::mpi_distributed, m_measurements_distribute_image, wavelets,
92  m_uv_data, m_sigma, m_imsizey, m_imsizex, m_sara.size(), state.range(3) + 1, true, true,
93  false, 1e-3, 1e-2, 50);
94 
95  // Benchmark the application of the algorithm
96  while (state.KeepRunning()) {
97  auto start = std::chrono::high_resolution_clock::now();
98  auto result = (*m_padmm)();
99  auto end = std::chrono::high_resolution_clock::now();
100  std::cout << "Converged? " << result.good << " , niters = " << result.niters << std::endl;
101  state.SetIterationTime(b_utilities::duration(start, end, m_world));
102  }
103 }

References b_utilities::duration(), purify::factory::mpi_distributed, and purify::factory::mpi_sara.