12 auto const session = sopt::mpi::init(nargs, args);
13 auto const world = sopt::mpi::Communicator::World();
15 t_int
const conj = (nargs > 1) ? std::stod(
static_cast<std::string
>(args[1])) : 0;
16 const t_int iters = (nargs > 2) ? std::stod(
static_cast<std::string
>(args[2])) : 1;
18 auto const oversample_ratio = 2;
21 const t_real FoV = 25 * 60 * 60;
22 std::string
const results =
output_filename(
"times_" + std::to_string(world.size()) +
23 ((
static_cast<bool>(conj)) ?
"_conj" :
"") +
".txt");
24 std::ofstream out(world.is_root() ? results :
output_filename(
"empty.txt"));
25 if (world.is_root()) {
28 for (t_int nvis_iters = 6; nvis_iters < 9; nvis_iters++) {
29 for (t_int w_iter = 1; w_iter < 4; w_iter++) {
30 for (t_int cell_iters = 8; cell_iters < 13; cell_iters++) {
31 t_int
const number_of_vis = std::pow(10, nvis_iters);
32 const t_real rms_w = 50. * w_iter;
33 t_int
const imsizex = std::pow(2, cell_iters);
34 t_int
const imsizey = imsizex;
35 const t_real cell = FoV /
static_cast<t_real
>(imsizex);
38 t_uint
const number_of_pixels = imsizex * imsizey;
44 const auto cost = [](t_real x) -> t_real {
return std::abs(x * x); };
46 uv_data.units = utilities::vis_units::radians;
47 const Vector<t_complex> image = Vector<t_complex>::Random(number_of_pixels);
50 for (t_int i = 0; i < iters; i++) {
51 auto begin = std::chrono::high_resolution_clock::now();
52 const auto measure_op = factory::measurement_operator_factory<Vector<t_complex>>(
53 factory::distributed_measurement_operator::mpi_distribute_image, uv_data, imsizey,
55 true, 1e-6, 1e-6, dde_type::wkernel_radial);
56 auto end = std::chrono::high_resolution_clock::now();
57 con_time += world.all_reduce<t_real>(
58 std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin).count() * 1e-9,
61 begin = std::chrono::high_resolution_clock::now();
63 measure_op->adjoint() * (*measure_op * image).eval();
64 end = std::chrono::high_resolution_clock::now();
65 app_time += world.all_reduce<t_real>(
66 std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin).count() * 1e-9,
69 con_time /=
static_cast<t_real
>(iters);
70 app_time /=
static_cast<t_real
>(iters);
71 if (world.is_root()) {
72 out << number_of_vis <<
" " << rms_w <<
" " << imsizex <<
" " << con_time <<
" "
73 << app_time << std::endl;
74 PURIFY_LOW_LOG(
"Mean Construction Time: {}, Mean Application Time: {}", con_time,
#define PURIFY_LOW_LOG(...)
Low priority message.
const t_real pi
mathematical constant
const std::map< std::string, kernel > kernel_from_string
void set_level(const std::string &level)
Method to set the logging level of the default Log object.
utilities::vis_params w_stacking(utilities::vis_params const ¶ms, sopt::mpi::Communicator const &comm, const t_int iters, const std::function< t_real(t_real)> &cost, const t_real k_means_rel_diff)
utilities::vis_params conjugate_w(const utilities::vis_params &uv_vis)
reflects visibilities into the w >= 0 domain
utilities::vis_params random_sample_density(const t_int vis_num, const t_real mean, const t_real standard_deviation, const t_real rms_w)
Generates a random visibility coverage.
std::string output_filename(std::string const &filename)
Test output file.