JASPL  0.2
Just Another Signal Processing Library
taskitem_templates.tpp
1 template <typename T>
2 std::string TaskItem::FakeKernelTemplating( std::string kernel_source ) {
3 
4  std::string type_str = get_type_name<T>();
5  boost::replace_all( kernel_source, "TYPE", type_str );
6 
7  return kernel_source;
8 }
9 
10 template <typename T>
11 void TaskItem::LoadCLKernel( std::string kernel_scr, std::string kernel_name ) {
12 
13  sources.clear();
14 
15  std::string local_kernel = FakeKernelTemplating<T>( kernel_scr );
16 
17  sources.push_back({local_kernel.c_str(),local_kernel.length()});
18 
19  program = cl::Program (context,sources);
20 
21  if( program.build({current_device}) != CL_SUCCESS ) {
22 
23  std::string err_str = __func__;
24  err_str += "\nError Building OpenCL Program\n ";
25  err_str += "Compilier Output:\n ";
26  err_str += program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(current_device);
27  err_str += "\n";
28  throw std::runtime_error( err_str );
29  }
30 
31  cl_int err = 0;
32  kernel = cl::Kernel(program, kernel_name.c_str() );
33  OCL_DEBUG( err );
34 
35 }