Bolt  1.3
C++ template library with support for OpenCL
Classes | Macros
clcode.h File Reference

Defines macros to help the user create code with C++ semantics for OpenCL kernels. More...

#include <string>

Go to the source code of this file.

Classes

struct  TypeName< TypeNameType >
 
struct  ClCode< Type >
 The definition of a type trait for the definition of a type, which could be arbitrarily complex. More...
 

Macros

#define BOLT_CL_CLCODE_H
 
#define STRINGIFY_CODE2(...)   #__VA_ARGS__
 Macro that wraps around arbitrary text, and creates a string out of it This macro is helpful to write inline OpenCL programs, as it avoids wrapping every line of OpenCL line with "XXX"
.
 
#define STRINGIFY_CODE(...)   STRINGIFY_CODE2( __VA_ARGS__ )
 
#define BOLT_CODE_STRING(...)   STRINGIFY_CODE( __VA_ARGS__ ); __VA_ARGS__;
 
#define BOLT_HOST_DEVICE_DEFINITION(...)   "namespace bolt { namespace cl {\n" STRINGIFY_CODE( __VA_ARGS__ ) "\n } } \n" ; __VA_ARGS__;
 
#define BOLT_CREATE_TYPENAME(...)   template<> struct TypeName< __VA_ARGS__ > { static std::string get( ) { return #__VA_ARGS__; } };
 
#define BOLT_CREATE_CLCODE(Type, CODE_STRING)
 
#define BOLT_TEMPLATE_REGISTER_NEW_TYPE(CONTAINER, OLDTYPE, NEWTYPE)
 This macro specializes a template with a new type using the template definition of a previously defined type This is a convenience macro to specialize a template for a new type, using the generic template definition from a previosly defined type.
 
#define BOLT_TEMPLATE_REGISTER_NEW_ITERATOR(CONTAINER, OLDTYPE, NEWTYPE)
 This macro specializes a template iterator with a new type using the template definition of a previously defined iterator type This is a convenience macro to specialize an iterator for a new type, using the generic template definition from a previosly defined iterator.
 
#define BOLT_CREATE_DEFINE(DefineName, D,...)
 This macro defines a macro on the kernel code.
 
#define BOLT_TEMPLATE_REGISTER_NEW_TRANSFORM_ITERATOR(FUNCTOR, DATATYPE)
 This macro creates a TypeName and the ClCode data structure for the transform iterator associated with FUNCTOR and DATA_TYPE. The use of this macro is necessary if transform iterator is used in the algorithm This macro creates a TypeName and the ClCode data structure for the transform iterator associated with FUNCTOR and DATA_TYPE. The use of this macro is necessary if transform iterator is used in the algorithm.
 
#define BOLT_TEMPLATE_REGISTER_NEW_PERMUTATION_ITERATOR(ELEMENT_ITERATOR, INDEX_ITERATOR)
 A Permutation iterator is associated with an ELEMENT_ITERATOR and INDEX_ITERATOR. This Macro creates a ClCode and TypeName for the permutation iterator. A Permutation iterator is associated with an ELEMENT_ITERATOR and INDEX_ITERATOR. This Macro creates a ClCode and TypeName for the permutation iterator. Note that the data type associated with the element and index iterators must be declared within the BOLT_FUNCTOR macro. Only device vector iterators can be used with permutation iterators. Both the iterators has to be either std iterators or device vector iterators. Combination of the two is not supported.
 
#define BOLT_FUNCTOR(T,...)
 
#define BOLT_TEMPLATE_FUNCTOR1(CONTAINER, TYPE1,...)
 
#define BOLT_TEMPLATE_FUNCTOR2(CONTAINER, TYPE1, TYPE2,...)
 
#define BOLT_TEMPLATE_FUNCTOR3(CONTAINER, TYPE1, TYPE2, TYPE3,...)
 
#define BOLT_TEMPLATE_FUNCTOR4(CONTAINER, TYPE1, TYPE2, TYPE3, TYPE4,...)
 
#define BOLT_CREATE_CODE_SNIPPET(Name,...)
 
#define BOLT_ADD_DEPENDENCY(Type, DependingType)   ClCode<Type>::addDependency(ClCode<DependingType>::get());
 

Detailed Description

Defines macros to help the user create code with C++ semantics for OpenCL kernels.