ocl_library_wrapper.h
Go to the documentation of this file.
1 
8 #ifndef OCL_LIBRARY_WRAPPER_H
9 #define OCL_LIBRARY_WRAPPER_H
10 
11 #define CL_HPP_MINIMUM_OPENCL_VERSION 110
12 #define CL_HPP_TARGET_OPENCL_VERSION 110
13 
14 #include <iostream>
15 #include <CL/cl2.hpp>
16 #include <vector>
17 #include <fstream>
18 #include <boost/shared_ptr.hpp>
19 #include <string>
20 #include <sstream>
21 
22 namespace pses_kinect_utilities
23 {
24 
25 typedef std::shared_ptr<cl::Device> DevicePtr;
26 typedef std::shared_ptr<cl::Context> ContextPtr;
27 typedef std::shared_ptr<cl::Program> ProgramPtr;
28 typedef std::shared_ptr<std::string> StringPtr;
29 typedef std::shared_ptr<cl::CommandQueue> QueuePtr;
30 typedef std::shared_ptr<cl::Kernel> KernelPtr;
31 typedef std::shared_ptr<cl::Buffer> BufferPtr;
32 
33 static const int W_ACCESS = 0;
34 static const int R_ACCESS = 1;
35 static const int RW_ACCESS = 2;
36 
37 DevicePtr get_ocl_default_device();
38 
39 ContextPtr get_ocl_context(DevicePtr device);
40 
41 StringPtr load_kernel_definition(const std::string& path);
42 
43 ProgramPtr build_ocl_program(DevicePtr device, ContextPtr context,
44  StringPtr kernel);
45 
46 QueuePtr create_ocl_command_queue(ContextPtr context, DevicePtr device);
47 
48 KernelPtr create_ocl_kernel(ProgramPtr program,
49  const std::string& program_name);
50 
51 template <typename T>
52 BufferPtr create_ocl_buffer(ContextPtr context, unsigned int n_elements,
53  int access_type)
54 {
55  cl::Buffer buffer;
56  switch (access_type)
57  {
58  case W_ACCESS:
59  {
60  buffer = cl::Buffer(*context, CL_MEM_WRITE_ONLY, sizeof(T) * n_elements);
61  break;
62  }
63  case R_ACCESS:
64  {
65  buffer = cl::Buffer(*context, CL_MEM_READ_ONLY, sizeof(T) * n_elements);
66  break;
67  }
68  case RW_ACCESS:
69  {
70  buffer = cl::Buffer(*context, CL_MEM_READ_WRITE, sizeof(T) * n_elements);
71  break;
72  }
73  default:
74  {
75  throw std::runtime_error("Unknown access type!");
76  }
77  }
78  return std::make_shared<cl::Buffer>(buffer);
79 }
80 
81 template <typename T>
82 void write_ocl_buffer(QueuePtr queue, BufferPtr buffer, std::vector<T>& array)
83 {
84  queue->enqueueWriteBuffer(*buffer, CL_TRUE, 0, sizeof(T) * array.size(),
85  array.data());
86 }
87 
88 template <typename T>
89 void write_ocl_buffer(QueuePtr queue, BufferPtr buffer,
90  const unsigned int size, const T* array)
91 {
92  queue->enqueueWriteBuffer(*buffer, CL_TRUE, 0, sizeof(T) * size, array);
93 }
94 
95 template <typename T>
96 void read_ocl_buffer(QueuePtr queue, BufferPtr buffer, std::vector<T>& array)
97 {
98  queue->enqueueReadBuffer(*buffer, CL_TRUE, 0, sizeof(T) * array.size(),
99  array.data());
100 }
101 
102 template <typename T>
103 void read_ocl_buffer(QueuePtr queue, BufferPtr buffer,
104  const unsigned int size, T* array)
105 {
106  queue->enqueueReadBuffer(*buffer, CL_TRUE, 0, sizeof(T) * size, array);
107 }
108 
109 } // namespace pses_kinect_utilities
110 
111 #endif // OCL_LIBRARY_WRAPPER_H
void read_ocl_buffer(QueuePtr queue, BufferPtr buffer, std::vector< T > &array)
ContextPtr get_ocl_context(DevicePtr device)
QueuePtr create_ocl_command_queue(ContextPtr context, DevicePtr device)
static const int R_ACCESS
std::shared_ptr< cl::Device > DevicePtr
StringPtr load_kernel_definition(const std::string &path)
std::shared_ptr< std::string > StringPtr
void write_ocl_buffer(QueuePtr queue, BufferPtr buffer, std::vector< T > &array)
std::shared_ptr< cl::Program > ProgramPtr
std::shared_ptr< cl::CommandQueue > QueuePtr
std::shared_ptr< cl::Buffer > BufferPtr
static const int W_ACCESS
BufferPtr create_ocl_buffer(ContextPtr context, unsigned int n_elements, int access_type)
KernelPtr create_ocl_kernel(ProgramPtr program, const std::string &program_name)
static const int RW_ACCESS
This namespace is used by the nodelets inside our package pses_kinect_utilities.
std::shared_ptr< cl::Context > ContextPtr
std::shared_ptr< cl::Kernel > KernelPtr
ProgramPtr build_ocl_program(DevicePtr device, ContextPtr context, StringPtr kernel)


pses_kinect_utilities
Author(s): Nicolas Acero
autogenerated on Sun Nov 26 2017 19:23:52