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

#include <flow_graph_opencl_node.h>

Inheritance diagram for tbb::flow::interface11::opencl_factory< DeviceFilter >::kernel:
Collaboration diagram for tbb::flow::interface11::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 Member Functions inherited from tbb::internal::no_assign
void operator= (const no_assign &)=delete
 
 no_assign (const no_assign &)=default
 
 no_assign ()=default
 

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::interface11::opencl_factory< DeviceFilter >::kernel

Definition at line 815 of file flow_graph_opencl_node.h.

Member Typedef Documentation

◆ factory_type

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

Definition at line 840 of file flow_graph_opencl_node.h.

Constructor & Destructor Documentation

◆ kernel() [1/2]

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

Definition at line 817 of file flow_graph_opencl_node.h.

817  : my_factory( k.my_factory ) {
818  // Clone my_cl_kernel via opencl_program
819  size_t ret_size = 0;
820 
821  std::vector<char> kernel_name;
822  for ( size_t curr_size = 32;; curr_size <<= 1 ) {
823  kernel_name.resize( curr_size <<= 1 );
824  enforce_cl_retcode( clGetKernelInfo( k.my_cl_kernel, CL_KERNEL_FUNCTION_NAME, curr_size, kernel_name.data(), &ret_size ), "Failed to get kernel info" );
825  if ( ret_size < curr_size ) break;
826  }
827 
828  cl_program program;
829  enforce_cl_retcode( clGetKernelInfo( k.my_cl_kernel, CL_KERNEL_PROGRAM, sizeof(program), &program, &ret_size ), "Failed to get kernel info" );
830  __TBB_ASSERT( ret_size == sizeof(program), NULL );
831 
832  my_cl_kernel = opencl_program< factory_type >( my_factory, program ).get_cl_kernel( kernel_name.data() );
833  }

References __TBB_ASSERT, tbb::flow::interface11::enforce_cl_retcode(), tbb::flow::interface11::opencl_program< Factory >::get_cl_kernel(), tbb::flow::interface11::opencl_factory< DeviceFilter >::kernel::my_cl_kernel, and tbb::flow::interface11::opencl_factory< DeviceFilter >::kernel::my_factory.

Here is the call graph for this function:

◆ ~kernel()

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

Definition at line 835 of file flow_graph_opencl_node.h.

835  {
836  enforce_cl_retcode( clReleaseKernel( my_cl_kernel ), "Failed to release a kernel" );
837  }

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

Here is the call graph for this function:

◆ kernel() [2/2]

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

Definition at line 842 of file flow_graph_opencl_node.h.

842 : my_cl_kernel( k ), my_factory( f ) {}

Friends And Related Function Documentation

◆ opencl_factory

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

Definition at line 849 of file flow_graph_opencl_node.h.

◆ opencl_program

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

Definition at line 852 of file flow_graph_opencl_node.h.

Member Data Documentation

◆ my_cl_kernel

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

◆ my_factory

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

The documentation for this class was generated from the following file:
tbb::flow::interface11::enforce_cl_retcode
void enforce_cl_retcode(cl_int err, std::string msg)
Definition: flow_graph_opencl_node.h:57
__TBB_ASSERT
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165
tbb::flow::interface11::opencl_factory::kernel::my_cl_kernel
cl_kernel my_cl_kernel
Definition: flow_graph_opencl_node.h:845
tbb::flow::interface11::opencl_factory::kernel::my_factory
factory_type & my_factory
Definition: flow_graph_opencl_node.h:846

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.