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

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.
virtual ~profile_base ()
 The destructor.
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.
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.
virtual std::string csv_representation () const =0
 csv representation of an operation
bool is_slow (viennacl::ocl::device const &dev) const
 returns whether or not the profile is likely to be slow on a particular device
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
vcl_size_t num_kernels () const
 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
 Generates the code associated with this profile onto the provided stream Redirects to the virtual core() method.

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.

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 ( ) [inline, virtual]

The destructor.


Member Function Documentation

void configure_local_sizes ( viennacl::ocl::kernel k,
vcl_size_t   
) const [inline, protected]
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 [protected, pure 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 [inline, protected, virtual]
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 [inline, protected, virtual]
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 [inline, protected, virtual]

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 [inline, virtual]

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 [inline, protected, virtual]
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 num_kernels_ [protected]
unsigned int vector_size_ [protected]

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