Pulled latest update from trunk

This commit is contained in:
Benoit Steiner 2016-12-21 16:43:27 -08:00
commit 660da83e18

View File

@ -26,8 +26,7 @@
namespace Eigen { namespace Eigen {
namespace TensorSycl { namespace TensorSycl {
template<typename Expr, typename FunctorExpr, typename TupleType > struct ExecExprFunctorKernel{
template<typename Expr, typename FunctorExpr, typename TupleType > struct ExecExprFunctorKernel{
typedef typename internal::createPlaceHolderExpression<Expr>::Type PlaceHolderExpr; typedef typename internal::createPlaceHolderExpression<Expr>::Type PlaceHolderExpr;
typedef typename Expr::Index Index; typedef typename Expr::Index Index;
@ -44,7 +43,8 @@ namespace TensorSycl {
if (gId < range) if (gId < range)
device_evaluator.evalScalar(gId); device_evaluator.evalScalar(gId);
} }
}; };
/// The run function in tensor sycl convert the expression tree to a buffer /// The run function in tensor sycl convert the expression tree to a buffer
/// based expression tree; /// based expression tree;
/// creates the expression tree for the device with accessor to buffers; /// creates the expression tree for the device with accessor to buffers;
@ -54,12 +54,12 @@ void run(Expr &expr, Dev &dev) {
Eigen::TensorEvaluator<Expr, Dev> evaluator(expr, dev); Eigen::TensorEvaluator<Expr, Dev> evaluator(expr, dev);
const bool needs_assign = evaluator.evalSubExprsIfNeeded(NULL); const bool needs_assign = evaluator.evalSubExprsIfNeeded(NULL);
if (needs_assign) { if (needs_assign) {
auto functors = internal::extractFunctors(evaluator); typedef decltype(internal::extractFunctors(evaluator)) FunctorExpr;
typedef decltype(functors) FunctorExpr; FunctorExpr functors = internal::extractFunctors(evaluator);
dev.sycl_queue().submit([&](cl::sycl::handler &cgh) { dev.sycl_queue().submit([&](cl::sycl::handler &cgh) {
// create a tuple of accessors from Evaluator // create a tuple of accessors from Evaluator
auto tuple_of_accessors = internal::createTupleOfAccessors<decltype(evaluator)>(cgh, evaluator); typedef decltype(internal::createTupleOfAccessors<decltype(evaluator)>(cgh, evaluator)) TupleType;
typedef decltype(tuple_of_accessors) TupleType; TupleType tuple_of_accessors = internal::createTupleOfAccessors<decltype(evaluator)>(cgh, evaluator);
typename Expr::Index range, GRange, tileSize; typename Expr::Index range, GRange, tileSize;
dev.parallel_for_setup(static_cast<typename Expr::Index>(evaluator.dimensions().TotalSize()), tileSize, range, GRange); dev.parallel_for_setup(static_cast<typename Expr::Index>(evaluator.dimensions().TotalSize()), tileSize, range, GRange);