Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel Class Reference

#include <flow_graph_opencl_node.h>

Inheritance diagram for tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel:
Collaboration diagram for tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel:

Public Member Functions

 kernel (const kernel &k)
 
 ~kernel ()
 

Private Types

typedef opencl_factory< DeviceFilter > factory_type
 

Private Member Functions

 kernel (const cl_kernel &k, factory_type &f)
 

Private Attributes

cl_kernel my_cl_kernel
 
factory_typemy_factory
 

Friends

template<typename DeviceFilter_ >
class opencl_factory
 
template<typename Factory >
class opencl_program
 

Detailed Description

template<typename DeviceFilter>
class tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel

Definition at line 812 of file flow_graph_opencl_node.h.

Member Typedef Documentation

◆ factory_type

template<typename DeviceFilter>
typedef opencl_factory<DeviceFilter> tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel::factory_type
private

Definition at line 837 of file flow_graph_opencl_node.h.

Constructor & Destructor Documentation

◆ kernel() [1/2]

template<typename DeviceFilter>
tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel::kernel ( const kernel k)
inline

Definition at line 814 of file flow_graph_opencl_node.h.

References __TBB_ASSERT, tbb::flow::interface10::enforce_cl_retcode(), and tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel::my_cl_kernel.

814  : my_factory( k.my_factory ) {
815  // Clone my_cl_kernel via opencl_program
816  size_t ret_size = 0;
817 
818  std::vector<char> kernel_name;
819  for ( size_t curr_size = 32;; curr_size <<= 1 ) {
820  kernel_name.resize( curr_size <<= 1 );
821  enforce_cl_retcode( clGetKernelInfo( k.my_cl_kernel, CL_KERNEL_FUNCTION_NAME, curr_size, kernel_name.data(), &ret_size ), "Failed to get kernel info" );
822  if ( ret_size < curr_size ) break;
823  }
824 
825  cl_program program;
826  enforce_cl_retcode( clGetKernelInfo( k.my_cl_kernel, CL_KERNEL_PROGRAM, sizeof(program), &program, &ret_size ), "Failed to get kernel info" );
827  __TBB_ASSERT( ret_size == sizeof(program), NULL );
828 
829  my_cl_kernel = opencl_program< factory_type >( my_factory, program ).get_cl_kernel( kernel_name.data() );
830  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165
void enforce_cl_retcode(cl_int err, std::string msg)
Here is the call graph for this function:

◆ ~kernel()

template<typename DeviceFilter>
tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel::~kernel ( )
inline

Definition at line 832 of file flow_graph_opencl_node.h.

References tbb::flow::interface10::enforce_cl_retcode().

832  {
833  enforce_cl_retcode( clReleaseKernel( my_cl_kernel ), "Failed to release a kernel" );
834  }
void enforce_cl_retcode(cl_int err, std::string msg)
Here is the call graph for this function:

◆ kernel() [2/2]

template<typename DeviceFilter>
tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel::kernel ( const cl_kernel &  k,
factory_type f 
)
inlineprivate

Friends And Related Function Documentation

◆ opencl_factory

template<typename DeviceFilter>
template<typename DeviceFilter_ >
friend class opencl_factory
friend

Definition at line 846 of file flow_graph_opencl_node.h.

◆ opencl_program

template<typename DeviceFilter>
template<typename Factory >
friend class opencl_program
friend

Definition at line 849 of file flow_graph_opencl_node.h.

Member Data Documentation

◆ my_cl_kernel

template<typename DeviceFilter>
cl_kernel tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel::my_cl_kernel
private

◆ my_factory

template<typename DeviceFilter>
factory_type& tbb::flow::interface10::opencl_factory< DeviceFilter >::kernel::my_factory
private

Definition at line 843 of file flow_graph_opencl_node.h.


The documentation for this class was generated from the following file:

Copyright © 2005-2019 Intel Corporation. All Rights Reserved.

Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are registered trademarks or trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

* Other names and brands may be claimed as the property of others.