My Project
map.hpp
1 
20 #ifndef _MAP_HPP_
21 #define _MAP_HPP_ 1
22 #include <typeinfo>
23 #include <cassert>
24 #include <cxxabi.h>
25 #include <thread>
26 #include <sstream>
27 
28 #include "kernelkeeper.tcc"
29 #include "portexception.hpp"
30 #include "schedule.hpp"
31 #include "simpleschedule.hpp"
32 #include "kernel.hpp"
33 #include "port_info.hpp"
34 #include "allocate.hpp"
35 #include "dynalloc.hpp"
36 #include "stdalloc.hpp"
37 #include "mapbase.hpp"
38 #include "poolschedule.hpp"
39 #include "basicparallel.hpp"
40 #include "noparallel.hpp"
41 #include "Clock.hpp"
42 #include "SystemClock.tcc"
43 
45 extern Clock *system_clock;
46 
47 class Map : public MapBase
48 {
49 public:
54  Map();
58  virtual ~Map();
59 
66  template< class scheduler = simple_schedule,
67  class allocator = dynalloc,
68  class parallelism_monitor = basic_parallel >
69  void exe()
70  {
71  for( auto * const submap : sub_maps )
72  {
73  auto &container( all_kernels.acquire() );
74  auto &subcontainer( submap->all_kernels.acquire() );
75  container.insert( subcontainer.begin(),
76  subcontainer.end() );
77  all_kernels.release();
78  submap->all_kernels.release();
79  }
83  //enableDuplication( source_kernels, all_kernels );
84  volatile bool exit_alloc( false );
85  allocator alloc( (*this), exit_alloc );
87  std::thread mem_thread( [&](){
88  alloc.run();
89  });
90 
91  alloc.waitTillReady();
92 
93  scheduler sched( (*this) );
94  sched.init();
95 
97  std::thread sched_thread( [&](){
98  sched.start();
99  });
100 
101  volatile bool exit_para( false );
103  parallelism_monitor pm( (*this) ,
104  alloc ,
105  sched ,
106  exit_para );
107  std::thread parallel_mon( [&](){
108  pm.start();
109  });
111  sched_thread.join();
112 
114  exit_alloc = true;
115  mem_thread.join();
117  exit_para = true;
118  parallel_mon.join();
119 
121  return;
122  }
123 
124 
125 protected:
126 
133  void checkEdges( kernelkeeper &source_k );
134 
142  void enableDuplication( kernelkeeper &source, kernelkeeper &all );
143 
144 
149  friend class basic_parallel;
150  friend class Schedule;
151  friend class Allocate;
152 
153 };
154 
155 #endif /* END _MAP_HPP_ */
Definition: basicparallel.hpp:48
Definition: mapbase.hpp:100
kernelkeeper all_kernels
Definition: mapbase.hpp:422
Definition: submap.hpp:34
Definition: simpleschedule.hpp:30
virtual ~Map()
Definition: map.cpp:40
void checkEdges(kernelkeeper &source_k)
Definition: map.cpp:45
std::vector< MapBase * > sub_maps
Definition: mapbase.hpp:429
Definition: dynalloc.hpp:25
Definition: map.hpp:47
kernelkeeper source_kernels
Definition: mapbase.hpp:418
Definition: allocate.hpp:54
Map()
Definition: map.cpp:35
Definition: schedule.hpp:34
void exe()
Definition: map.hpp:69
void enableDuplication(kernelkeeper &source, kernelkeeper &all)
Definition: map.cpp:68