24 #ifndef VISIONCPP_INCLUDE_FRAMEWORK_EXECUTOR_POLICY_NOFUSE_HPP_
25 #define VISIONCPP_INCLUDE_FRAMEWORK_EXECUTOR_POLICY_NOFUSE_HPP_
30 template <
size_t LC,
size_t LR,
size_t LCT,
size_t LRT,
typename RHS,
31 size_t LVL,
typename DeviceT>
46 template <
size_t LC,
size_t LR,
size_t LCT,
size_t LRT,
typename Expr,
typename DeviceT>
59 auto iOutput =
NoFuseExpr<LC, LR, LCT, LRT, decltype(expr.rhs)::ND_Category,
60 decltype(expr.rhs), DeviceT>
::no_fuse(expr.rhs, dev);
61 using IOutput = decltype(iOutput);
63 using ARHS =
typename Expr::template ExprExchange<IOutput>;
64 fuse<LC, LR, LCT, LRT>(
65 Assign<
ALHS, ARHS, ALHS::Type::Cols, ALHS::Type::Rows,
68 ARHS>::Type::Level>(lhs, ARHS(iOutput)),
75 template <
size_t LC,
size_t LR,
size_t LCT,
size_t LRT,
typename Expr,
typename DeviceT>
89 NoFuseExpr<LC, LR, LCT, LRT, decltype(expr.lhs)::ND_Category,
90 decltype(expr.lhs), DeviceT>
::no_fuse(expr.lhs, dev);
93 NoFuseExpr<LC, LR, LCT, LRT, decltype(expr.rhs)::ND_Category,
94 decltype(expr.rhs), DeviceT>
::no_fuse(expr.rhs, dev);
96 using ARHS =
typename Expr::template ExprExchange<decltype(i_lhs_output),
97 decltype(i_rhs_output)>;
99 fuse<LC, LR, LCT, LRT>(
100 Assign<
ALHS, ARHS, ALHS::Type::Cols, ALHS::Type::Rows,
101 ALHS::Type::LeafType,
104 lhs, ARHS(i_lhs_output, i_rhs_output)),
112 template <
size_t LC,
size_t LR,
size_t LCT,
size_t LRT,
typename LHS,
113 typename RHS,
size_t Cols,
size_t Rows,
size_t LeafType,
size_t LVL,
typename DeviceT>
115 Assign<LHS, RHS, Cols, Rows, LeafType, LVL>, DeviceT> {
128 const DeviceT &dev) {
133 typename Expr::template ExprExchange<LHS, decltype(i_rhs_output)>;
134 fuse<LC, LR, LCT, LRT>(ARHS(expr.
lhs, i_rhs_output), dev);
140 template <
size_t LC,
size_t LR,
size_t LCT,
size_t LRT,
typename Expr,
static constexpr size_t Unary
static constexpr size_t Binary
void no_fuse(Expr expr, const DeviceT &dev)
template deduction function for no_fuse expression
The definition is in Assign file.
the definition is in LeafNode.
static ALHS no_fuse(Expr expr, const DeviceT &dev)
the no_fuse function to execute an expression node with one operand.
static ALHS no_fuse(Expr expr, const DeviceT &dev)
the no_fuse function to execute an expression node with two operands.
static ALHS no_fuse(LeafNode< RHS, LVL > rhs, const DeviceT &dev)
the no_fuse function to execute a leafNode.
visioncpp::internal::NoFuseExpr< LC, LR, LCT, LRT, internal::expr_category::Binary, Assign< LHS, RHS, Cols, Rows, LeafType, LVL >, DeviceT >::no_fuse static LHS no_fuse(Assign< LHS, RHS, Cols, Rows, LeafType, LVL > expr, const DeviceT &dev)
the no_fuse function to execute an Assign expression.
visioncpp::internal::NoFuseExpr< LC, LR, LCT, LRT, internal::expr_category::Binary, Assign< LHS, RHS, Cols, Rows, LeafType, LVL >, DeviceT >::out_Type LHS out_Type
The NoFuseExpr struct is used to generate one device kernel per each non-terminal node in the express...