1 #ifndef __RANDOM_STRATEGY_H__
2 #define __RANDOM_STRATEGY_H__
8 #include <boost/random/mersenne_twister.hpp>
9 #include <boost/random/uniform_int_distribution.hpp>
19 MPI_Comm comm = MPI_COMM_WORLD)
33 std::vector<int> master_pids;
34 for(
int i=0; i < num_masters_; i++)
37 int num_workers =
pids_.size();
38 int num_assigned_masters = 0;
41 for(
int master_pid : master_pids) {
46 int fraction_workers = num_workers / num_masters_ ;
47 if(num_assigned_masters < num_workers % num_masters_)
50 std::vector<int> worker_pids;
52 for(
int j = 0; j < fraction_workers; j++) {
55 worker_pids.push_back(worker_pid);
59 addCommGroup(master_pid, worker_pids);
61 num_assigned_masters++;
69 boost::random::mt19937
rng_;
73 for(
int i=0; i < num; i++)
79 boost::random::uniform_int_distribution<> random_pid(0,
pids_.size()-1);
80 int pid_idx= random_pid(
rng_);
85 for(itr =
pids_.begin(); itr !=
pids_.end(); itr++, pid_idx--) {
Role_t
roles a processor can attain
boost::random::mt19937 rng_
RandomStrategy(size_t num_masters, boost::shared_ptr< CommTopology > topology, MPI_Comm comm=MPI_COMM_WORLD)
virtual ~RandomStrategy()
std::string::iterator iterator
Defines an interface for splitter strategy implementations.