ViennaCL - The Vienna Computing Library  1.5.1
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Friends
profile_base Class Referenceabstract

Base class for an operation profile. More...

#include <profile_base.hpp>

Inheritance diagram for profile_base:
matrix_product matrix_saxpy scalar_reduction vector_reduction vector_saxpy

Public Types

typedef std::list< std::pair
< scheduler::statement,
scheduler::statement_node > > 
statements_type
 

Public Member Functions

 profile_base (unsigned int vectorization, vcl_size_t local_size_1, vcl_size_t local_size_2, vcl_size_t num_kernels)
 The constructor. More...
 
virtual ~profile_base ()
 The destructor. More...
 
virtual void configure_range_enqueue_arguments (vcl_size_t kernel_id, statements_type const &statements, viennacl::ocl::kernel &k, unsigned int &n_arg) const =0
 Configures the range and enqueues the arguments associated with the profile. More...
 
virtual void kernel_arguments (statements_type const &statements, std::string &arguments_string) const =0
 
unsigned int vector_size () const
 Get the vector size of the kernel. More...
 
virtual std::string csv_representation () const =0
 csv representation of an operation More...
 
bool is_slow (viennacl::ocl::device const &dev) const
 returns whether or not the profile is likely to be slow on a particular device More...
 
bool is_invalid (viennacl::ocl::device const &dev, vcl_size_t scalartype_size) const
 returns whether or not the profile leads to undefined behavior on particular device More...
 
vcl_size_t num_kernels () const
 Returns the number of kernels needed by this operation. More...
 
virtual void operator() (utils::kernel_generation_stream &stream, vcl_size_t device_offset, statements_type const &statements) const
 Generates the code associated with this profile onto the provided stream Redirects to the virtual core() method. More...
 

Protected Member Functions

virtual bool invalid_impl (viennacl::ocl::device const &, vcl_size_t) const
 
virtual bool is_slow_impl (viennacl::ocl::device const &) const
 
virtual vcl_size_t lmem_used (vcl_size_t) const
 
void configure_local_sizes (viennacl::ocl::kernel &k, vcl_size_t) const
 
virtual void print (std::ostream &s) const
 
virtual void core (vcl_size_t kernel_id, utils::kernel_generation_stream &stream, statements_type const &statements, std::vector< detail::mapping_type > const &mapping) const =0
 Generates the body of the associated kernel function. More...
 

Protected Attributes

unsigned int vector_size_
 
vcl_size_t local_size_1_
 
vcl_size_t local_size_2_
 
vcl_size_t num_kernels_
 

Friends

std::ostream & operator<< (std::ostream &, profile_base const &)
 

Detailed Description

Base class for an operation profile.

Member Typedef Documentation

Constructor & Destructor Documentation

profile_base ( unsigned int  vectorization,
vcl_size_t  local_size_1,
vcl_size_t  local_size_2,
vcl_size_t  num_kernels 
)
inline

The constructor.

virtual ~profile_base ( )
inlinevirtual

The destructor.

Member Function Documentation

void configure_local_sizes ( viennacl::ocl::kernel k,
vcl_size_t   
) const
inlineprotected
virtual void configure_range_enqueue_arguments ( vcl_size_t  kernel_id,
statements_type const &  statements,
viennacl::ocl::kernel k,
unsigned int &  n_arg 
) const
pure virtual

Configures the range and enqueues the arguments associated with the profile.

Implemented in scalar_reduction, matrix_saxpy, matrix_product, vector_reduction, and vector_saxpy.

virtual void core ( vcl_size_t  kernel_id,
utils::kernel_generation_stream stream,
statements_type const &  statements,
std::vector< detail::mapping_type > const &  mapping 
) const
protectedpure virtual

Generates the body of the associated kernel function.

Parameters
kernel_idIf this profile requires multiple kernel, the index for which the core should be generated
streamThe output stream the kernel is written to
statementsthe statements for which the code should be generated
mappingthe mapping of the statement_nodes to the mapped_objects
virtual std::string csv_representation ( ) const
pure virtual

csv representation of an operation

Useful when writing to a file

Implemented in scalar_reduction, matrix_saxpy, matrix_product, vector_reduction, and vector_saxpy.

virtual bool invalid_impl ( viennacl::ocl::device const &  ,
vcl_size_t   
) const
inlineprotectedvirtual
bool is_invalid ( viennacl::ocl::device const &  dev,
vcl_size_t  scalartype_size 
) const
inline

returns whether or not the profile leads to undefined behavior on particular device

Parameters
devthe given device
scalartype_sizeLocal memory required to execute the kernel
bool is_slow ( viennacl::ocl::device const &  dev) const
inline

returns whether or not the profile is likely to be slow on a particular device

Parameters
devthe given device
virtual bool is_slow_impl ( viennacl::ocl::device const &  ) const
inlineprotectedvirtual
virtual void kernel_arguments ( statements_type const &  statements,
std::string &  arguments_string 
) const
pure virtual
virtual vcl_size_t lmem_used ( vcl_size_t  ) const
inlineprotectedvirtual

Reimplemented in scalar_reduction.

vcl_size_t num_kernels ( ) const
inline

Returns the number of kernels needed by this operation.

virtual void operator() ( utils::kernel_generation_stream stream,
vcl_size_t  device_offset,
statements_type const &  statements 
) const
inlinevirtual

Generates the code associated with this profile onto the provided stream Redirects to the virtual core() method.

Parameters
streamStream onto which the code should be generated
device_offsetthe index of the device in the context (used for the kernel name)
statementsthe statements associated with this profile

Get Prototype, initialize mapping

virtual void print ( std::ostream &  s) const
inlineprotectedvirtual
unsigned int vector_size ( ) const
inline

Get the vector size of the kernel.

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
profile_base const &  profile 
)
friend

Field Documentation

vcl_size_t local_size_1_
protected
vcl_size_t local_size_2_
protected
vcl_size_t num_kernels_
protected
unsigned int vector_size_
protected

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