PURIFY
Next-generation radio interferometric imaging
mpi_utilities.h
Go to the documentation of this file.
1 #ifndef PURIFY_MPI_UTILITIES_H
2 #define PURIFY_MPI_UTILITIES_H
3 
4 #include "purify/config.h"
5 #include <vector>
6 #include "purify/uvw_utilities.h"
7 #include <sopt/linear_transform.h>
8 
9 #ifdef PURIFY_MPI
10 #include <sopt/mpi/communicator.h>
11 #endif
12 #ifdef PURIFY_OPENMP
13 #include <omp.h>
14 #endif
15 namespace purify {
16 namespace utilities {
17 #ifdef PURIFY_MPI
21 void regroup(utilities::vis_params &params, std::vector<t_int> const &groups,
22  const t_int max_groups);
23 void regroup(vis_params &uv_params, std::vector<t_int> &image_index,
24  std::vector<t_int> const &groups_, const t_int max_groups);
26 vis_params regroup_and_scatter(vis_params const &params, std::vector<t_int> const &groups,
27  sopt::mpi::Communicator const &comm);
29 std::tuple<vis_params, std::vector<t_int>> regroup_and_all_to_all(
30  vis_params const &params, const std::vector<t_int> &image_index,
31  std::vector<t_int> const &groups, sopt::mpi::Communicator const &comm);
33 vis_params regroup_and_all_to_all(vis_params const &params, std::vector<t_int> const &groups,
34  sopt::mpi::Communicator const &comm);
37 vis_params scatter_visibilities(vis_params const &params, std::vector<t_int> const &sizes,
38  sopt::mpi::Communicator const &comm);
39 
42 vis_params scatter_visibilities(sopt::mpi::Communicator const &comm);
45 vis_params all_to_all_visibilities(vis_params const &params, std::vector<t_int> const &sizes,
46  sopt::mpi::Communicator const &comm);
48 utilities::vis_params distribute_params(utilities::vis_params const &params,
49  sopt::mpi::Communicator const &comm);
51 utilities::vis_params set_cell_size(const sopt::mpi::Communicator &comm,
52  utilities::vis_params const &uv_vis, const t_real &cell_x,
53  const t_real &cell_y);
55 utilities::vis_params w_stacking(utilities::vis_params const &params,
56  sopt::mpi::Communicator const &comm, const t_int iters,
57  const std::function<t_real(t_real)> &cost,
58  const t_real k_means_rel_diff = 1e-5);
61 std::tuple<utilities::vis_params, std::vector<t_int>, std::vector<t_real>>
62 w_stacking_with_all_to_all(utilities::vis_params const &params, const t_real du,
63  const t_int min_support, const t_int max_support,
64  sopt::mpi::Communicator const &comm, const t_int iters,
65  const t_real fill_relaxation, const std::function<t_real(t_real)> &cost,
66  const t_real k_means_rel_diff = 1e-5);
67 #endif
78 template <class T>
79 t_real step_size(T const &vis, const std::shared_ptr<sopt::LinearTransform<T> const> &measurements,
80  const std::shared_ptr<sopt::LinearTransform<T> const> &wavelets,
81  const t_uint sara_size) {
82  // measurement operator may use different number of nodes than wavelet operator
83  // so needs to be done separately
84  const T dimage = measurements->adjoint() * vis;
85  return (sara_size > 0) ? (wavelets->adjoint() * dimage).cwiseAbs().maxCoeff() : 0.;
86 };
87 } // namespace utilities
88 } // namespace purify
89 #endif
std::tuple< vis_params, std::vector< t_int > > regroup_and_all_to_all(vis_params const &params, const std::vector< t_int > &image_index, std::vector< t_int > const &groups, sopt::mpi::Communicator const &comm)
utilities::vis_params distribute_params(utilities::vis_params const &params, sopt::mpi::Communicator const &comm)
utilities::vis_params w_stacking(utilities::vis_params const &params, sopt::mpi::Communicator const &comm, const t_int iters, const std::function< t_real(t_real)> &cost, const t_real k_means_rel_diff)
t_real step_size(T const &vis, const std::shared_ptr< sopt::LinearTransform< T > const > &measurements, const std::shared_ptr< sopt::LinearTransform< T > const > &wavelets, const t_uint sara_size)
Calculate step size using MPI (does not include factor of 1e-3)
Definition: mpi_utilities.h:79
void regroup(vis_params &uv_params, std::vector< t_int > const &groups_, const t_int max_groups)
Definition: mpi_utilities.cc:9
vis_params all_to_all_visibilities(vis_params const &params, std::vector< t_int > const &sizes, sopt::mpi::Communicator const &comm)
std::tuple< utilities::vis_params, std::vector< t_int >, std::vector< t_real > > w_stacking_with_all_to_all(utilities::vis_params const &params, const t_real du, const t_int min_support, const t_int max_support, sopt::mpi::Communicator const &comm, const t_int iters, const t_real fill_relaxation, const std::function< t_real(t_real)> &cost, const t_real k_means_rel_diff)
vis_params scatter_visibilities(vis_params const &params, std::vector< t_int > const &sizes, sopt::mpi::Communicator const &comm)
vis_params regroup_and_scatter(vis_params const &params, std::vector< t_int > const &groups, sopt::mpi::Communicator const &comm)
utilities::vis_params set_cell_size(const sopt::mpi::Communicator &comm, utilities::vis_params const &uv_vis, const t_real &cell_x, const t_real &cell_y)