1 #include "purify/config.h" 
    4 #include "purify/directories.h" 
   11 int main(
int nargs, 
char const **args) {
 
   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); };
 
   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>>(
 
   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();
 
   62           Vector<t_complex> 
const measurements =
 
   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.
 
int main(int nargs, char const **args)