/usr/include/viennacl/scheduler/preset.hpp is in libviennacl-dev 1.7.1+dfsg1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | #ifndef VIENNACL_SCHEDULER_PRESET_HPP_
#define VIENNACL_SCHEDULER_PRESET_HPP_
/* =========================================================================
Copyright (c) 2010-2016, Institute for Microelectronics,
Institute for Analysis and Scientific Computing,
TU Wien.
Portions of this software are copyright by UChicago Argonne, LLC.
-----------------
ViennaCL - The Vienna Computing Library
-----------------
Project Head: Karl Rupp rupp@iue.tuwien.ac.at
(A list of authors and contributors can be found in the manual)
License: MIT (X11), see file LICENSE in the base directory
============================================================================= */
#include "viennacl/device_specific/forwards.h"
#include "viennacl/meta/predicate.hpp"
#include "viennacl/scheduler/forwards.h"
namespace viennacl
{
namespace scheduler
{
namespace preset
{
template<typename NumericT>
statement mat_mat_prod(NumericT alpha, viennacl::matrix_base<NumericT> const * A, bool A_trans,
viennacl::matrix_base<NumericT> const * B, bool B_trans,
NumericT beta, viennacl::matrix_base<NumericT> const * C)
{
vcl_size_t dummy = 0;
statement::container_type array(7);
scheduler::statement::add_element(dummy, array[0].lhs, *C);
array[0].op.type_family = OPERATION_BINARY_TYPE_FAMILY;
array[0].op.type = OPERATION_BINARY_ASSIGN_TYPE;
array[0].rhs.type_family = COMPOSITE_OPERATION_FAMILY;
array[0].rhs.node_index = 1;
array[1].lhs.type_family = COMPOSITE_OPERATION_FAMILY;
array[1].lhs.node_index = 2;
array[1].op.type_family = OPERATION_BINARY_TYPE_FAMILY;
array[1].op.type = OPERATION_BINARY_ADD_TYPE;
array[1].rhs.type_family = COMPOSITE_OPERATION_FAMILY;
array[1].rhs.node_index = 6;
array[2].lhs.type_family = COMPOSITE_OPERATION_FAMILY;
array[2].lhs.node_index = 3;
array[2].op.type_family = OPERATION_BINARY_TYPE_FAMILY;
array[2].op.type = OPERATION_BINARY_MULT_TYPE;
scheduler::statement::add_element(dummy, array[2].rhs, alpha);
if (A_trans)
{
array[3].lhs.type_family = COMPOSITE_OPERATION_FAMILY;
array[3].lhs.node_index = 4;
statement::add_element(dummy, array[4].lhs, *A);
array[4].op.type_family = OPERATION_UNARY_TYPE_FAMILY;
array[4].op.type = OPERATION_UNARY_TRANS_TYPE;
}
else
{
statement::add_element(dummy, array[3].lhs, *A);
}
array[3].op.type_family = OPERATION_BINARY_TYPE_FAMILY;
array[3].op.type = OPERATION_BINARY_MAT_MAT_PROD_TYPE;
if (B_trans)
{
array[3].rhs.type_family = COMPOSITE_OPERATION_FAMILY;
array[3].rhs.node_index = 5;
statement::add_element(dummy, array[5].lhs, *B);
array[5].op.type_family = OPERATION_UNARY_TYPE_FAMILY;
array[5].op.type = OPERATION_UNARY_TRANS_TYPE;
}
else
{
statement::add_element(dummy, array[3].rhs, *B);
}
scheduler::statement::add_element(dummy, array[6].rhs, *C);
array[6].op.type_family = OPERATION_BINARY_TYPE_FAMILY;
array[6].op.type = OPERATION_BINARY_MULT_TYPE;
scheduler::statement::add_element(dummy, array[6].rhs, beta);
return statement(array);
}
}
}
}
#endif
|