Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
tbb::flow::interface10::opencl_buffer< T, Factory > Class Template Reference

#include <flow_graph_opencl_node.h>

Inheritance diagram for tbb::flow::interface10::opencl_buffer< T, Factory >:
Collaboration diagram for tbb::flow::interface10::opencl_buffer< T, Factory >:

Public Types

typedef cl_mem native_object_type
 
typedef opencl_buffer memory_object_type
 
typedef Factory opencl_factory_type
 
template<access_type a>
using iterator = T *
 

Public Member Functions

template<access_type a>
iterator< a > access () const
 
T * data () const
 
template<access_type a = read_write>
iterator< a > begin () const
 
template<access_type a = read_write>
iterator< a > end () const
 
size_t size () const
 
T & operator[] (ptrdiff_t k)
 
 opencl_buffer ()
 
 opencl_buffer (size_t size)
 
 opencl_buffer (Factory &f, size_t size)
 
cl_mem native_object () const
 
const opencl_buffermemory_object () const
 
void send (opencl_device device, opencl_async_msg< opencl_buffer, Factory > &dependency) const
 
void receive (const opencl_async_msg< opencl_buffer, Factory > &dependency) const
 
opencl_subbuffer< T, Factory > subbuffer (size_t index, size_t size) const
 

Private Types

typedef opencl_buffer_impl< Factory > impl_type
 

Private Member Functions

 opencl_buffer (Factory &f, cl_mem m, size_t index, size_t size)
 

Private Attributes

std::shared_ptr< impl_typemy_impl
 

Friends

template<typename >
class opencl_factory
 
template<typename , typename >
class opencl_subbuffer
 
bool operator== (const opencl_buffer< T, Factory > &lhs, const opencl_buffer< T, Factory > &rhs)
 

Detailed Description

template<typename T, typename Factory = opencl_info::default_opencl_factory>
class tbb::flow::interface10::opencl_buffer< T, Factory >

Definition at line 633 of file flow_graph_opencl_node.h.

Member Typedef Documentation

◆ impl_type

template<typename T, typename Factory = opencl_info::default_opencl_factory>
typedef opencl_buffer_impl<Factory> tbb::flow::interface10::opencl_buffer< T, Factory >::impl_type
private

Definition at line 692 of file flow_graph_opencl_node.h.

◆ iterator

template<typename T, typename Factory = opencl_info::default_opencl_factory>
template<access_type a>
using tbb::flow::interface10::opencl_buffer< T, Factory >::iterator = T*

Definition at line 639 of file flow_graph_opencl_node.h.

◆ memory_object_type

template<typename T, typename Factory = opencl_info::default_opencl_factory>
typedef opencl_buffer tbb::flow::interface10::opencl_buffer< T, Factory >::memory_object_type

Definition at line 636 of file flow_graph_opencl_node.h.

◆ native_object_type

template<typename T, typename Factory = opencl_info::default_opencl_factory>
typedef cl_mem tbb::flow::interface10::opencl_buffer< T, Factory >::native_object_type

Definition at line 635 of file flow_graph_opencl_node.h.

◆ opencl_factory_type

template<typename T, typename Factory = opencl_info::default_opencl_factory>
typedef Factory tbb::flow::interface10::opencl_buffer< T, Factory >::opencl_factory_type

Definition at line 637 of file flow_graph_opencl_node.h.

Constructor & Destructor Documentation

◆ opencl_buffer() [1/4]

template<typename T, typename Factory = opencl_info::default_opencl_factory>
tbb::flow::interface10::opencl_buffer< T, Factory >::opencl_buffer ( )
inline

Definition at line 660 of file flow_graph_opencl_node.h.

660 {}

◆ opencl_buffer() [2/4]

template<typename T , typename Factory >
tbb::flow::interface10::opencl_buffer< T, Factory >::opencl_buffer ( size_t  size)

Definition at line 1212 of file flow_graph_opencl_node.h.

1212 : my_impl( std::make_shared<impl_type>( size*sizeof(T), opencl_info::default_factory() ) ) {}
default_opencl_factory & default_factory()

◆ opencl_buffer() [3/4]

template<typename T, typename Factory = opencl_info::default_opencl_factory>
tbb::flow::interface10::opencl_buffer< T, Factory >::opencl_buffer ( Factory &  f,
size_t  size 
)
inline

Definition at line 662 of file flow_graph_opencl_node.h.

662 : my_impl( std::make_shared<impl_type>( size*sizeof(T), f ) ) {}

◆ opencl_buffer() [4/4]

template<typename T, typename Factory = opencl_info::default_opencl_factory>
tbb::flow::interface10::opencl_buffer< T, Factory >::opencl_buffer ( Factory &  f,
cl_mem  m,
size_t  index,
size_t  size 
)
inlineprivate

Definition at line 690 of file flow_graph_opencl_node.h.

690 : my_impl( std::make_shared<impl_type>( m, index*sizeof(T), size*sizeof(T), f ) ) {}

Member Function Documentation

◆ access()

template<typename T, typename Factory = opencl_info::default_opencl_factory>
template<access_type a>
iterator<a> tbb::flow::interface10::opencl_buffer< T, Factory >::access ( ) const
inline

Definition at line 642 of file flow_graph_opencl_node.h.

642  {
643  T* ptr = (T*)my_impl->get_host_ptr();
644  __TBB_ASSERT( ptr, NULL );
645  return iterator<a>( ptr );
646  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169

References __TBB_ASSERT, and tbb::flow::interface10::opencl_buffer< T, Factory >::my_impl.

◆ begin()

template<typename T, typename Factory = opencl_info::default_opencl_factory>
template<access_type a = read_write>
iterator<a> tbb::flow::interface10::opencl_buffer< T, Factory >::begin ( ) const
inline

Definition at line 651 of file flow_graph_opencl_node.h.

651 { return access<a>(); }

Referenced by tbb::flow::interface10::opencl_buffer< T, Factory >::operator[]().

Here is the caller graph for this function:

◆ data()

template<typename T, typename Factory = opencl_info::default_opencl_factory>
T* tbb::flow::interface10::opencl_buffer< T, Factory >::data ( ) const
inline

Definition at line 648 of file flow_graph_opencl_node.h.

648 { return &access<read_write>()[0]; }

◆ end()

template<typename T, typename Factory = opencl_info::default_opencl_factory>
template<access_type a = read_write>
iterator<a> tbb::flow::interface10::opencl_buffer< T, Factory >::end ( ) const
inline

Definition at line 654 of file flow_graph_opencl_node.h.

654 { return access<a>()+my_impl->size()/sizeof(T); }

References tbb::flow::interface10::opencl_buffer< T, Factory >::my_impl.

◆ memory_object()

template<typename T, typename Factory = opencl_info::default_opencl_factory>
const opencl_buffer& tbb::flow::interface10::opencl_buffer< T, Factory >::memory_object ( ) const
inline

Definition at line 668 of file flow_graph_opencl_node.h.

668  {
669  return *this;
670  }

◆ native_object()

template<typename T, typename Factory = opencl_info::default_opencl_factory>
cl_mem tbb::flow::interface10::opencl_buffer< T, Factory >::native_object ( ) const
inline

Definition at line 664 of file flow_graph_opencl_node.h.

664  {
665  return my_impl->get_cl_mem();
666  }

References tbb::flow::interface10::opencl_buffer< T, Factory >::my_impl.

◆ operator[]()

template<typename T, typename Factory = opencl_info::default_opencl_factory>
T& tbb::flow::interface10::opencl_buffer< T, Factory >::operator[] ( ptrdiff_t  k)
inline

Definition at line 658 of file flow_graph_opencl_node.h.

658 { return begin()[k]; }

References tbb::flow::interface10::opencl_buffer< T, Factory >::begin().

Here is the call graph for this function:

◆ receive()

template<typename T, typename Factory = opencl_info::default_opencl_factory>
void tbb::flow::interface10::opencl_buffer< T, Factory >::receive ( const opencl_async_msg< opencl_buffer< T, Factory >, Factory > &  dependency) const
inline

Definition at line 679 of file flow_graph_opencl_node.h.

679  {
680  __TBB_ASSERT( dependency.data( /*wait = */false ) == *this, NULL );
681  opencl_async_msg<void*, Factory> d = my_impl->receive( dependency.get_event() );
682  const cl_event *e = d.get_event();
683  if ( e ) dependency.set_event( *e );
684  else dependency.clear_event();
685  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d

References __TBB_ASSERT, tbb::flow::interface10::opencl_async_msg< T, Factory >::clear_event(), d, tbb::flow::interface10::opencl_async_msg< T, Factory >::data(), tbb::flow::interface10::opencl_async_msg< T, Factory >::get_event(), tbb::flow::interface10::opencl_buffer< T, Factory >::my_impl, and tbb::flow::interface10::opencl_async_msg< T, Factory >::set_event().

Here is the call graph for this function:

◆ send()

template<typename T, typename Factory = opencl_info::default_opencl_factory>
void tbb::flow::interface10::opencl_buffer< T, Factory >::send ( opencl_device  device,
opencl_async_msg< opencl_buffer< T, Factory >, Factory > &  dependency 
) const
inline

Definition at line 672 of file flow_graph_opencl_node.h.

672  {
673  __TBB_ASSERT( dependency.data( /*wait = */false ) == *this, NULL );
674  opencl_async_msg<void*, Factory> d = my_impl->send( device, dependency.get_event() );
675  const cl_event *e = d.get_event();
676  if ( e ) dependency.set_event( *e );
677  else dependency.clear_event();
678  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d

References __TBB_ASSERT, tbb::flow::interface10::opencl_async_msg< T, Factory >::clear_event(), d, tbb::flow::interface10::opencl_async_msg< T, Factory >::data(), tbb::flow::interface10::opencl_async_msg< T, Factory >::get_event(), tbb::flow::interface10::opencl_buffer< T, Factory >::my_impl, and tbb::flow::interface10::opencl_async_msg< T, Factory >::set_event().

Here is the call graph for this function:

◆ size()

template<typename T, typename Factory = opencl_info::default_opencl_factory>
size_t tbb::flow::interface10::opencl_buffer< T, Factory >::size ( ) const
inline

Definition at line 656 of file flow_graph_opencl_node.h.

656 { return my_impl->size()/sizeof(T); }

References tbb::flow::interface10::opencl_buffer< T, Factory >::my_impl.

◆ subbuffer()

template<typename T , typename Factory >
opencl_subbuffer< T, Factory > tbb::flow::interface10::opencl_buffer< T, Factory >::subbuffer ( size_t  index,
size_t  size 
) const

Definition at line 716 of file flow_graph_opencl_node.h.

716  {
717  return opencl_subbuffer<T, Factory>( *this, index, size );
718 }

References size.

Friends And Related Function Documentation

◆ opencl_factory

template<typename T, typename Factory = opencl_info::default_opencl_factory>
template<typename >
friend class opencl_factory
friend

Definition at line 701 of file flow_graph_opencl_node.h.

◆ opencl_subbuffer

template<typename T, typename Factory = opencl_info::default_opencl_factory>
template<typename , typename >
friend class opencl_subbuffer
friend

Definition at line 703 of file flow_graph_opencl_node.h.

◆ operator==

template<typename T, typename Factory = opencl_info::default_opencl_factory>
bool operator== ( const opencl_buffer< T, Factory > &  lhs,
const opencl_buffer< T, Factory > &  rhs 
)
friend

Definition at line 696 of file flow_graph_opencl_node.h.

696  {
697  return lhs.my_impl == rhs.my_impl;
698  }

Member Data Documentation

◆ my_impl


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.