HSSOptions.hpp
Go to the documentation of this file.
1 /*
2  * STRUMPACK -- STRUctured Matrices PACKage, Copyright (c) 2014, The
3  * Regents of the University of California, through Lawrence Berkeley
4  * National Laboratory (subject to receipt of any required approvals
5  * from the U.S. Dept. of Energy). All rights reserved.
6  *
7  * If you have questions about your rights to use or distribute this
8  * software, please contact Berkeley Lab's Technology Transfer
9  * Department at TTD@lbl.gov.
10  *
11  * NOTICE. This software is owned by the U.S. Department of Energy. As
12  * such, the U.S. Government has been granted for itself and others
13  * acting on its behalf a paid-up, nonexclusive, irrevocable,
14  * worldwide license in the Software to reproduce, prepare derivative
15  * works, and perform publicly and display publicly. Beginning five
16  * (5) years after the date permission to assert copyright is obtained
17  * from the U.S. Department of Energy, and subject to any subsequent
18  * five (5) year renewals, the U.S. Government is granted for itself
19  * and others acting on its behalf a paid-up, nonexclusive,
20  * irrevocable, worldwide license in the Software to reproduce,
21  * prepare derivative works, distribute copies to the public, perform
22  * publicly and display publicly, and to permit others to do so.
23  *
24  * Developers: Pieter Ghysels, Francois-Henry Rouet, Xiaoye S. Li.
25  * (Lawrence Berkeley National Lab, Computational Research
26  * Division).
27  */
33 #ifndef HSS_OPTIONS_HPP
34 #define HSS_OPTIONS_HPP
35 
37 
38 
39 namespace strumpack {
40 
42  namespace HSS {
43 
51  template<typename real_t> inline real_t default_HSS_rel_tol() {
52  return real_t(1e-2);
53  }
59  template<typename real_t> inline real_t default_HSS_abs_tol() {
60  return real_t(1e-8);
61  }
62 
70  template<> inline float default_HSS_rel_tol() {
71  return 1e-1;
72  }
78  template<> inline float default_HSS_abs_tol() {
79  return 1e-5;
80  }
81 
87  enum class CompressionAlgorithm {
88  ORIGINAL,
91  STABLE,
98  };
99 
105  std::string get_name(CompressionAlgorithm a);
106 
107 
117  template<typename scalar_t> class HSSOptions {
118 
119  public:
124  using real_t = typename RealType<scalar_t>::value_type;
125 
134  assert(rel_tol <= real_t(1.) && rel_tol >= real_t(0.));
135  rel_tol_ = rel_tol;
136  }
137 
144  assert(abs_tol >= real_t(0.));
145  abs_tol_ = abs_tol;
146  }
147 
156  assert(leaf_size > 0);
157  leaf_size_ = leaf_size;
158  }
159 
165  void set_d0(int d0) { assert(d0 > 0); d0_ = d0; }
166 
174  void set_dd(int dd) { assert(dd > 0); dd_ = dd; }
175 
180  void set_p(int p) { assert(p >= 0); p_ = p; }
181 
185  void set_max_rank(int max_rank) {
186  assert(max_rank > 0);
187  max_rank_ = max_rank;
188  }
189 
195  random_engine_ = random_engine;
196  }
197 
204  random_distribution_ = random_distribution;
205  }
206 
214  compress_algo_ = a;
215  }
216 
224  clustering_algo_ = a;
225  }
226 
233  void set_approximate_neighbors(int neighbors) {
234  approximate_neighbors_ = neighbors;
235  }
236 
245  void set_ann_iterations(int iters) {
246  assert(iters > 0);
247  ann_iterations_ = iters;
248  }
249 
255  user_defined_random_ = user_defined_random;
256  }
257 
264  sync_ = sync;
265  }
266 
271  void set_log_ranks(bool log_ranks) { log_ranks_ = log_ranks; }
272 
277  void set_verbose(bool verbose) { verbose_ = verbose; }
278 
284  real_t rel_tol() const { return rel_tol_; }
285 
291  real_t abs_tol() const { return abs_tol_; }
292 
298  int leaf_size() const { return leaf_size_; }
299 
309  int d0() const { return d0_; }
310 
319  int dd() const { return dd_; }
320 
326  int p() const { return p_; }
327 
334  int max_rank() const { return max_rank_; }
335 
341  random::RandomEngine random_engine() const { return random_engine_; }
342 
350  return random_distribution_;
351  }
352 
359  return compress_algo_;
360  }
361 
369  return clustering_algo_;
370  }
371 
378  int approximate_neighbors() const {
379  return approximate_neighbors_;
380  }
381 
390  int ann_iterations() const { return ann_iterations_; }
391 
400  bool user_defined_random() const { return user_defined_random_; }
401 
409  bool synchronized_compression() const { return sync_; }
410 
419  bool log_ranks() const { return log_ranks_; }
420 
427  bool verbose() const { return verbose_; }
428 
437  void set_from_command_line(int argc, const char* const* cargv);
438 
443  void describe_options() const;
444 
445  private:
446  real_t rel_tol_ = default_HSS_rel_tol<real_t>();
447  real_t abs_tol_ = default_HSS_abs_tol<real_t>();
448  int leaf_size_ = 512;
449  int d0_ = 128;
450  int dd_ = 64;
451  int p_ = 10;
452  int max_rank_ = 50000;
453  random::RandomEngine random_engine_ =
455  random::RandomDistribution random_distribution_ =
457  bool user_defined_random_ = false;
458  bool log_ranks_ = false;
460  bool sync_ = false;
462  int approximate_neighbors_ = 64;
463  int ann_iterations_ = 5;
464  bool verbose_ = true;
465  };
466 
467  } // end namespace HSS
468 } // end namespace strumpack
469 
470 
471 #endif // HSS_OPTIONS_HPP
strumpack::HSS::default_HSS_rel_tol
real_t default_HSS_rel_tol()
Definition: HSSOptions.hpp:51
strumpack::HSS::HSSOptions::real_t
typename RealType< scalar_t >::value_type real_t
Definition: HSSOptions.hpp:124
strumpack::random::RandomEngine::LINEAR
@ LINEAR
strumpack::HSS::HSSOptions::synchronized_compression
bool synchronized_compression() const
Definition: HSSOptions.hpp:409
strumpack::HSS::HSSOptions::set_clustering_algorithm
void set_clustering_algorithm(ClusteringAlgorithm a)
Definition: HSSOptions.hpp:223
strumpack::HSS::HSSOptions::set_d0
void set_d0(int d0)
Definition: HSSOptions.hpp:165
strumpack::HSS::HSSOptions::random_distribution
random::RandomDistribution random_distribution() const
Definition: HSSOptions.hpp:349
strumpack::HSS::HSSOptions::set_rel_tol
void set_rel_tol(real_t rel_tol)
Definition: HSSOptions.hpp:133
strumpack::HSS::get_name
std::string get_name(CompressionAlgorithm a)
strumpack::HSS::HSSOptions::dd
int dd() const
Definition: HSSOptions.hpp:319
strumpack::HSS::HSSOptions::set_leaf_size
void set_leaf_size(int leaf_size)
Definition: HSSOptions.hpp:155
strumpack::HSS::HSSOptions::describe_options
void describe_options() const
strumpack::HSS::HSSOptions
Class containing several options for the HSS code and data-structures.
Definition: HSSOptions.hpp:117
strumpack::HSS::HSSOptions::set_dd
void set_dd(int dd)
Definition: HSSOptions.hpp:174
strumpack::HSS::HSSOptions::verbose
bool verbose() const
Definition: HSSOptions.hpp:427
strumpack::HSS::HSSOptions::set_random_distribution
void set_random_distribution(random::RandomDistribution random_distribution)
Definition: HSSOptions.hpp:203
strumpack
Definition: StrumpackOptions.hpp:42
strumpack::HSS::HSSOptions::set_log_ranks
void set_log_ranks(bool log_ranks)
Definition: HSSOptions.hpp:271
strumpack::HSS::HSSOptions::set_approximate_neighbors
void set_approximate_neighbors(int neighbors)
Definition: HSSOptions.hpp:233
strumpack::HSS::HSSOptions::set_compression_algorithm
void set_compression_algorithm(CompressionAlgorithm a)
Definition: HSSOptions.hpp:213
Clustering.hpp
Main include file for the different clustering/ordering codes. These ordering codes can be used to de...
strumpack::random::RandomDistribution
RandomDistribution
Definition: RandomWrapper.hpp:74
strumpack::HSS::HSSOptions::d0
int d0() const
Definition: HSSOptions.hpp:309
strumpack::HSS::HSSOptions::set_synchronized_compression
void set_synchronized_compression(bool sync)
Definition: HSSOptions.hpp:263
strumpack::HSS::HSSOptions::set_user_defined_random
void set_user_defined_random(bool user_defined_random)
Definition: HSSOptions.hpp:254
strumpack::HSS::CompressionAlgorithm
CompressionAlgorithm
Definition: HSSOptions.hpp:87
strumpack::HSS::HSSOptions::set_p
void set_p(int p)
Definition: HSSOptions.hpp:180
strumpack::random::RandomEngine
RandomEngine
Random number engine.
Definition: RandomWrapper.hpp:52
strumpack::HSS::HSSOptions::p
int p() const
Definition: HSSOptions.hpp:326
strumpack::HSS::HSSOptions::ann_iterations
int ann_iterations() const
Definition: HSSOptions.hpp:390
strumpack::HSS::HSSOptions::user_defined_random
bool user_defined_random() const
Definition: HSSOptions.hpp:400
strumpack::random::RandomDistribution::NORMAL
@ NORMAL
strumpack::HSS::HSSOptions::set_max_rank
void set_max_rank(int max_rank)
Definition: HSSOptions.hpp:185
strumpack::HSS::CompressionAlgorithm::HARD_RESTART
@ HARD_RESTART
strumpack::HSS::HSSOptions::rel_tol
real_t rel_tol() const
Definition: HSSOptions.hpp:284
strumpack::HSS::HSSOptions::random_engine
random::RandomEngine random_engine() const
Definition: HSSOptions.hpp:341
strumpack::ClusteringAlgorithm
ClusteringAlgorithm
Definition: Clustering.hpp:51
strumpack::HSS::HSSOptions::set_abs_tol
void set_abs_tol(real_t abs_tol)
Definition: HSSOptions.hpp:143
strumpack::CompressionType::HSS
@ HSS
strumpack::HSS::HSSOptions::set_random_engine
void set_random_engine(random::RandomEngine random_engine)
Definition: HSSOptions.hpp:194
strumpack::HSS::CompressionAlgorithm::STABLE
@ STABLE
strumpack::HSS::HSSOptions::clustering_algorithm
ClusteringAlgorithm clustering_algorithm() const
Definition: HSSOptions.hpp:368
strumpack::HSS::HSSOptions::log_ranks
bool log_ranks() const
Definition: HSSOptions.hpp:419
strumpack::HSS::HSSOptions::max_rank
int max_rank() const
Definition: HSSOptions.hpp:334
strumpack::HSS::HSSOptions::set_from_command_line
void set_from_command_line(int argc, const char *const *cargv)
strumpack::HSS::HSSOptions::set_verbose
void set_verbose(bool verbose)
Definition: HSSOptions.hpp:277
strumpack::ClusteringAlgorithm::TWO_MEANS
@ TWO_MEANS
strumpack::HSS::CompressionAlgorithm::ORIGINAL
@ ORIGINAL
strumpack::HSS::HSSOptions::set_ann_iterations
void set_ann_iterations(int iters)
Definition: HSSOptions.hpp:245
strumpack::HSS::HSSOptions::leaf_size
int leaf_size() const
Definition: HSSOptions.hpp:298
strumpack::HSS::HSSOptions::compression_algorithm
CompressionAlgorithm compression_algorithm() const
Definition: HSSOptions.hpp:358
strumpack::HSS::HSSOptions::approximate_neighbors
int approximate_neighbors() const
Definition: HSSOptions.hpp:378
strumpack::HSS::default_HSS_abs_tol
real_t default_HSS_abs_tol()
Definition: HSSOptions.hpp:59
strumpack::HSS::HSSOptions::abs_tol
real_t abs_tol() const
Definition: HSSOptions.hpp:291