Fréchet View  1.6.0
A Tool for Exploring Fréchet Distance Algorithms
concurrency.h
Go to the documentation of this file.
1 
2 #ifndef FRECHET_VIEW_CONCURRENCY_H
3 #define FRECHET_VIEW_CONCURRENCY_H
4 
5 #include <tbb/task_scheduler_init.h>
6 #include <tbb/tbb.h>
7 #include <chrono>
8 #include <clm4rm.h>
9 
10 namespace frechet { namespace app {
23 {
24 private:
29  tbb::task_scheduler_init* tbb_context;
31  int num_cores;
34 
36  cl_platform_id platform = nullptr;
38  cl_context ctx;
40  cl_device_id device = nullptr;
42  cl_command_queue queue = nullptr;
44  cl_event event = nullptr;
46  cl_int clerr;
47 
49  std::string device_name;
51  cl_uint gpu_units;
54 
55 public:
62 
67  void setup(int max_threads);
78  void close();
79 
81  static int countThreads();
83  static int countCores();
85  static tbb::tbb_thread::id currentThread();
86 
88  static bool hasGpuSupport();
89 
91  static std::string gpuName();
93  static cl_uint countGpuUnits();
94 
96  static cl_context clContext();
98  static cl_command_queue clQueue();
99 
105  static void maxMaxtrixTile(size2_t&);
106 
107  // System info: number of physical cores
108  //static int countCpuCores();
109  // System info: size (in bytes) of L1,2,3 cache
115  static int cacheSize(int level);
116 
117 private:
119  void findCacheSizes();
121  static void cpuid(int leaf, unsigned int regs[4]);
123  static void cpuid(int leaf, int level, unsigned int regs[4]);
125  static const char* findKernelDirectory(const char* subdir);
126 };
127 
128 // Debug timers
132 typedef std::chrono::high_resolution_clock Clock;
137 
141 void pushTimer();
148 time_point printTimer(std::string label, bool do_print = true);
155 time_point popTimer(std::string label, bool do_print = true);
161 time_point printDebugTimer(std::string label);
167 time_point popDebugTimer(std::string label);
168 
169 } } //namespace frechet
170 
171 #endif //FRECHET_VIEW_CONCURRENCY_H
a singleton class managing concurrency settings for the application.
Definition: concurrency.h:22
cl_uint gpu_units
number of GPU units (if known)
Definition: concurrency.h:51
time_point printTimer(std::string label, bool do_print=true)
clock benchmark
std::chrono::high_resolution_clock Clock
clock with high resolution; used for performing benchmark measurements
Definition: concurrency.h:132
size_t size2_t[2]
tow-dimensional size; used for various OpenCL parameters
Definition: clm4rm.h:67
cl_command_queue queue
OpenCL command queue.
Definition: concurrency.h:42
static void cpuid(int leaf, unsigned int regs[4])
retrieve CPU factory info
static tbb::tbb_thread::id currentThread()
Definition: concurrency.cpp:55
global definitions for all algorithms.
int num_threads
number of logical threads (always known)
Definition: concurrency.h:33
static const char * findKernelDirectory(const char *subdir)
look up directory containing OpenCL source files ("kernels")
static void maxMaxtrixTile(size2_t &)
set tile size for cubic matrix multiplication. Tiles adapt to local memory and/or compute units....
Definition: concurrency.cpp:81
Clock::time_point time_point
timestamp with high resolution
Definition: concurrency.h:136
std::string device_name
name of OpenCL device
Definition: concurrency.h:49
int num_cores
number of physical cores (if known)
Definition: concurrency.h:31
void findCacheSizes()
retrieve CPU cache sizes
cl_device_id device
OpenCL device.
Definition: concurrency.h:40
tbb::task_scheduler_init * tbb_context
controls the number of parallel threads that are used by TBB functions.
Definition: concurrency.h:29
cl_platform_id platform
OpenCL platform identifier.
Definition: concurrency.h:36
time_point printDebugTimer(std::string label)
clock benchmark and print elapsed time
static ConcurrencyContext instance
singleton instance
Definition: concurrency.h:61
~ConcurrencyContext()
destructor; releases all OpenCL resources
Definition: concurrency.cpp:31
time_point popTimer(std::string label, bool do_print=true)
clock benchmark and remove from stack
bool setupGpu(size2_t max_tile)
set up OpenCL context
Definition: concurrency.cpp:87
static std::string gpuName()
Definition: concurrency.cpp:63
time_point popDebugTimer(std::string label)
clock benchmark and remove from stack
size2_t max_tile
maximum tile size for Boolean matrix multiplication
Definition: concurrency.h:53
ConcurrencyContext()
default constructor; does no initialisation
Definition: concurrency.cpp:25
void close()
release all OpenCL resources.
cl_context ctx
OpenCL platform identifier.
Definition: concurrency.h:38
static int cacheSize(int level)
size of CPU cache memory
static cl_context clContext()
Definition: concurrency.cpp:71
static cl_command_queue clQueue()
Definition: concurrency.cpp:76
void pushTimer()
start a new benchmark timer and push it to stack
void setup(int max_threads)
set up TBB thread count
Definition: concurrency.cpp:39
cl_int clerr
last OpenCL return code
Definition: concurrency.h:46