1 #ifndef VIENNACL_SCHEDULER_STATEMENT_HPP
2 #define VIENNACL_SCHEDULER_STATEMENT_HPP
40 statement_not_supported_exception(std::string message) : message_(
"ViennaCL: Internal error: The scheduler encountered a problem with the operation provided: " + message) {}
42 virtual const char*
what()
const throw() {
return message_.c_str(); }
109 template <
typename T>
226 template <
typename T>
232 template <>
struct numeric_type_id<unsigned char> {
enum { value =
UCHAR_TYPE }; };
233 template <>
struct numeric_type_id<short> {
enum { value =
SHORT_TYPE }; };
234 template <>
struct numeric_type_id<unsigned short> {
enum { value =
USHORT_TYPE }; };
235 template <>
struct numeric_type_id<int> {
enum { value =
INT_TYPE }; };
236 template <>
struct numeric_type_id<unsigned int> {
enum { value =
UINT_TYPE }; };
237 template <>
struct numeric_type_id<long> {
enum { value =
LONG_TYPE }; };
238 template <>
struct numeric_type_id<unsigned long> {
enum { value =
ULONG_TYPE }; };
239 template <>
struct numeric_type_id<float> {
enum { value =
FLOAT_TYPE }; };
240 template <>
struct numeric_type_id<double> {
enum { value =
DOUBLE_TYPE }; };
247 template <
typename F>
434 template <
class LHS,
class OP,
class RHS>
struct num_nodes< const
vector_expression<LHS, RHS, OP> > {
enum {
value = 1 + num_nodes<LHS>::value + num_nodes<RHS>::value }; };
435 template <
class LHS,
class OP,
class RHS>
struct num_nodes< matrix_expression<LHS, RHS, OP> > {
enum {
value = 1 + num_nodes<LHS>::value + num_nodes<RHS>::value }; };
436 template <
class LHS,
class OP,
class RHS>
struct num_nodes< const matrix_expression<LHS, RHS, OP> > {
enum {
value = 1 + num_nodes<LHS>::value + num_nodes<RHS>::value }; };
437 template <
class LHS,
class OP,
class RHS>
struct num_nodes< scalar_expression<LHS, RHS, OP> > {
enum {
value = 1 + num_nodes<LHS>::value + num_nodes<RHS>::value }; };
438 template <
class LHS,
class OP,
class RHS>
struct num_nodes< const scalar_expression<LHS, RHS, OP> > {
enum {
value = 1 + num_nodes<LHS>::value + num_nodes<RHS>::value }; };
459 template <
typename LHS,
typename OP,
typename RHS>
460 statement(LHS & lhs, OP
const &, RHS
const & rhs) : array_(1 + result_of::num_nodes<RHS>::value)
512 lhs_rhs_element & elem,
523 lhs_rhs_element & elem,
529 elem.host_double = t;
533 template <
typename T>
535 lhs_rhs_element & elem,
541 assign_element(elem, t);
546 template <
typename T>
548 lhs_rhs_element & elem,
554 assign_element(elem, t);
558 template <
typename T,
typename F>
560 lhs_rhs_element & elem,
566 assign_element(elem, t);
570 template <
typename T>
572 lhs_rhs_element & elem,
578 assign_element(elem, t);
582 template <
typename T>
584 lhs_rhs_element & elem,
590 assign_element(elem, t);
594 template <
typename T>
596 lhs_rhs_element & elem,
602 assign_element(elem, t);
606 template <
typename T>
608 lhs_rhs_element & elem,
614 assign_element(elem, t);
621 template <
typename LHS,
typename RHS,
typename OP>
623 lhs_rhs_element & elem,
629 elem.node_index = next_free;
630 return add_node(next_free, next_free + 1, t);
633 template <
typename LHS,
typename RHS,
typename OP>
635 lhs_rhs_element & elem,
641 elem.node_index = next_free;
642 return add_node(next_free, next_free + 1, t);
645 template <
typename LHS,
typename RHS,
typename OP>
647 lhs_rhs_element & elem,
653 elem.node_index = next_free;
654 return add_node(next_free, next_free + 1, t);
661 template <
typename T>
664 return add_element(next_free, array_[current_index].lhs, t);
667 template <
typename T>
670 return add_element(next_free, array_[current_index].rhs, t);
675 template <
template <
typename,
typename,
typename>
class ExpressionT,
typename LHS,
typename RHS,
typename OP>
689 return add_lhs(current_index, next_free, proxy.lhs());
692 return add_rhs(current_index, add_lhs(current_index, next_free, proxy.lhs()), proxy.rhs());
statement_node_subtype subtype
Definition: forwards.h:270
viennacl::hyb_matrix< float > * hyb_matrix_float
Definition: forwards.h:406
viennacl::matrix_base< float > * matrix_row_float
Definition: forwards.h:339
std::size_t vcl_size_t
Definition: forwards.h:58
int host_int
Definition: forwards.h:285
Definition: forwards.h:210
Definition: forwards.h:83
Definition: forwards.h:182
viennacl::vcl_size_t size_type
Definition: forwards.h:451
vcl_size_t node_index
Definition: forwards.h:276
Definition: forwards.h:164
statement(container_type const &custom_array)
Definition: forwards.h:454
Definition: forwards.h:86
Definition: forwards.h:56
virtual const char * what() const
Definition: forwards.h:42
lhs_rhs_element lhs
Definition: forwards.h:422
Definition: forwards.h:192
Definition: forwards.h:176
char host_char
Definition: forwards.h:281
Definition: forwards.h:217
Definition: forwards.h:185
viennacl::implicit_vector_base< double > * implicit_vector_double
Definition: forwards.h:328
Definition: forwards.h:81
Definition: forwards.h:196
A tag class representing the modulus function for integers.
Definition: forwards.h:93
viennacl::scalar< float > * scalar_float
Definition: forwards.h:303
Expression template class for representing a tree of expressions which ultimately result in a matrix...
Definition: forwards.h:283
Definition: forwards.h:66
viennacl::coordinate_matrix< float > * coordinate_matrix_float
Definition: forwards.h:384
viennacl::implicit_matrix_base< float > * implicit_matrix_float
Definition: forwards.h:362
operation_node_type_family
Optimization enum for grouping operations into unary or binary operations. Just for optimization of l...
Definition: forwards.h:51
Definition: forwards.h:190
This file provides the forward declarations for the main types used within ViennaCL.
A class representing the 'data' for the LHS or RHS operand of the respective node.
Definition: forwards.h:267
Helper metafunction for obtaining the number of nodes of an expression template tree.
Definition: forwards.h:431
statement(LHS &lhs, OP const &, RHS const &rhs)
Generate the runtime statement from an expression template.
Definition: forwards.h:460
operation_node_type_family type_family
Definition: forwards.h:415
statement_not_supported_exception(std::string message)
Definition: forwards.h:40
viennacl::compressed_matrix< double > * compressed_matrix_double
Definition: forwards.h:374
Helper metafunction for obtaining the memory layout (row-/column-major) for a matrix.
Definition: forwards.h:248
A proxy for scalar expressions (e.g. from inner vector products)
Definition: forwards.h:175
An expression template class that represents a binary operation that yields a vector.
Definition: forwards.h:181
unsigned char host_uchar
Definition: forwards.h:282
lhs_rhs_element rhs
Definition: forwards.h:424
Struct for holding the type family as well as the type of an operation (could be addition, subtraction, norm, etc.)
Definition: forwards.h:413
Definition: forwards.h:80
viennacl::matrix_base< float, viennacl::column_major > * matrix_col_float
Definition: forwards.h:351
T::ERROR_UNKNOWN_OP_TYPE error_type
Definition: forwards.h:112
viennacl::scalar< double > * scalar_double
Definition: forwards.h:304
Definition: forwards.h:214
statement_not_supported_exception()
Definition: forwards.h:39
Definition: forwards.h:197
viennacl::matrix_base< double, viennacl::column_major > * matrix_col_double
Definition: forwards.h:352
Definition: forwards.h:170
viennacl::vector_base< float > * vector_float
Definition: forwards.h:315
Definition: forwards.h:82
statement_node_numeric_type numeric_type
Definition: forwards.h:271
Definition: forwards.h:93
statement_node_type_family
Groups the type of a node in the statement tree. Used for faster dispatching.
Definition: forwards.h:162
statement_node_numeric_type
Encodes the type of a node in the statement tree.
Definition: forwards.h:203
viennacl::coordinate_matrix< double > * coordinate_matrix_double
Definition: forwards.h:385
Definition: forwards.h:70
Definition: forwards.h:74
viennacl::vector_base< double > * vector_double
Definition: forwards.h:316
Definition: forwards.h:92
Definition: forwards.h:63
Definition: forwards.h:98
Helper metafunction for obtaining the operation ID as well as the operation family for unary and bina...
Definition: forwards.h:110
Definition: forwards.h:184
Definition: forwards.h:73
size_type root() const
Definition: forwards.h:475
Definition: forwards.h:84
Definition: forwards.h:173
Definition: forwards.h:69
Definition: forwards.h:209
double host_double
Definition: forwards.h:290
Definition: forwards.h:53
Definition: forwards.h:215
Definition: forwards.h:205
Definition: forwards.h:78
Definition: forwards.h:76
float host_float
Definition: forwards.h:289
Definition: forwards.h:89
Definition: forwards.h:75
Definition: forwards.h:99
viennacl::implicit_vector_base< float > * implicit_vector_float
Definition: forwards.h:327
std::vector< value_type > container_type
Definition: forwards.h:452
statement_node value_type
Definition: forwards.h:450
unsigned long host_ulong
Definition: forwards.h:288
viennacl::compressed_matrix< float > * compressed_matrix_float
Definition: forwards.h:373
short host_short
Definition: forwards.h:283
Definition: forwards.h:188
Definition: forwards.h:194
operation_node_type
Enumeration for identifying the possible operations.
Definition: forwards.h:61
unsigned int host_uint
Definition: forwards.h:286
Helper metafunction for obtaining the runtime type ID for a numerical type.
Definition: forwards.h:227
Definition: forwards.h:90
Definition: forwards.h:77
Definition: forwards.h:431
Definition: forwards.h:96
Definition: forwards.h:71
Definition: forwards.h:100
container_type const & array() const
Definition: forwards.h:473
void execute_composite(statement const &s, statement_node const &root_node)
Deals with x = RHS where RHS is an expression and x is either a scalar, a vector, or a matrix...
Definition: execute.hpp:41
Definition: forwards.h:97
Definition: forwards.h:95
Definition: forwards.h:79
Definition: forwards.h:211
statement_node_subtype
Encodes the type of a node in the statement tree.
Definition: forwards.h:180
Definition: forwards.h:207
Definition: forwards.h:101
Definition: forwards.h:212
virtual ~statement_not_supported_exception()
Definition: forwards.h:44
viennacl::implicit_matrix_base< double > * implicit_matrix_double
Definition: forwards.h:363
Definition: forwards.h:94
viennacl::matrix_base< double > * matrix_row_double
Definition: forwards.h:340
A tag for column-major storage of a dense matrix.
Definition: forwards.h:263
statement_node_type_family type_family
Definition: forwards.h:269
The main class for representing a statement such as x = inner_prod(y,z); at runtime.
Definition: forwards.h:447
Definition: forwards.h:85
viennacl::ell_matrix< float > * ell_matrix_float
Definition: forwards.h:395
Definition: forwards.h:68
Definition: forwards.h:57
A tag class representing the acos() function.
Definition: forwards.h:95
long host_long
Definition: forwards.h:287
viennacl::ell_matrix< double > * ell_matrix_double
Definition: forwards.h:396
Definition: forwards.h:187
op_element op
Definition: forwards.h:423
A tag class representing element-wise unary operations (like sin()) on vectors or matrices...
Definition: forwards.h:90
Definition: forwards.h:208
A tag for row-major storage of a dense matrix.
Definition: forwards.h:246
Definition: forwards.h:216
Definition: forwards.h:91
Main datastructure for an node in the statement tree.
Definition: forwards.h:420
Definition: forwards.h:67
Definition: forwards.h:72
Definition: forwards.h:213
Exception for the case the scheduler is unable to deal with the operation.
Definition: forwards.h:36
Definition: forwards.h:195
unsigned short host_ushort
Definition: forwards.h:284
operation_node_type type
Definition: forwards.h:416
Definition: forwards.h:191
viennacl::hyb_matrix< double > * hyb_matrix_double
Definition: forwards.h:407
Definition: forwards.h:167