RockyML  0.0.1
A High-Performance Scientific Computing Framework
blocked_descent.h
1 /*
2  Copyright (C) 2022 Amirabbas Asadi , All Rights Reserved
3  distributed under Apache-2.0 license
4 */
5 #ifndef ROCKY_ZAGROS_BCD_STRATEGY
6 #define ROCKY_ZAGROS_BCD_STRATEGY
7 #include <rocky/zagros/strategies/strategy.h>
8 
9 #include<set>
10 
11 namespace rocky{
12 namespace zagros{
13 
18 template<typename T_e, int T_dim>
19 class bcd_strategy: public basic_strategy<T_e, T_dim>{};
20 
25 template<typename T_e, int T_dim>
26 class bcd_mask_gen_strategy: public bcd_strategy<T_e, T_dim>{};
27 
32 template<typename T_e, int T_dim>
33 class bcd_sync_strategy: public bcd_strategy<T_e, T_dim>{};
34 
39 template<typename T_e, int T_dim>
41 protected:
42  blocked_system<T_e>* problem_;
43  std::vector<int>* bcd_mask_;
44 
45 int rand_dim(){
46  static std::uniform_int_distribution<int> dist(0, problem_->original_dim()-1);
47  return dist(rocky::utils::random::prng());
48 }
49 public:
50  bcd_mask_uniform_random(blocked_system<T_e>* problem, std::vector<int>* bcd_mask){
51  this->problem_ = problem;
52  this->bcd_mask_ = bcd_mask;
53  }
54  virtual void apply(){
55  std::set<int> dims;
56  while(dims.size() < this->problem_->block_dim())
57  dims.insert(this->rand_dim());
58  int i = 0;
59  for(auto dim: dims)
60  bcd_mask_->at(i++) = dim;
61  };
62 };
63 
64 
65 };
66 };
67 #endif
rocky::zagros::blocked_system
a virtual system to implement blocked coordinate descent
Definition: system.h:59
rocky::zagros::basic_strategy
Interface for all strategies.
Definition: strategy.h:31
rocky::zagros::bcd_mask_uniform_random
Uniform mask generator.
Definition: blocked_descent.h:40
rocky::zagros::bcd_strategy
Interface for blocked descent strategies.
Definition: blocked_descent.h:19
rocky::zagros::bcd_sync_strategy
Interface for bcd synchronization strategies.
Definition: blocked_descent.h:33
rocky::zagros::bcd_mask_gen_strategy
Interface for bcd mask generation strategies.
Definition: blocked_descent.h:26