From 62b4634ebe7cd7d391e91be812e5c18418db705a Mon Sep 17 00:00:00 2001 From: Benoit Steiner Date: Thu, 6 Jul 2017 05:08:13 +0000 Subject: [PATCH] Merged in mehdi_goli/upstr_benoit/TensorSYCLImageVolumePatchFixed (pull request PR-14) Applying Benoit's comment for Fixing ImageVolumePatch. * Applying Benoit's comment for Fixing ImageVolumePatch. Fixing conflict on cmake file. * Fixing dealocation of the memory in ImagePatch test for SYCL. * Fixing the automerge issue. --- .../Eigen/CXX11/src/Tensor/TensorImagePatch.h | 60 +++++++++++++------ .../src/Tensor/TensorSyclExprConstructor.h | 8 +-- .../CXX11/src/Tensor/TensorVolumePatch.h | 49 +++++++++++---- .../test/cxx11_tensor_image_patch_sycl.cpp | 4 +- .../test/cxx11_tensor_volume_patch_sycl.cpp | 4 +- 5 files changed, 86 insertions(+), 39 deletions(-) diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorImagePatch.h b/unsupported/Eigen/CXX11/src/Tensor/TensorImagePatch.h index c56e3648a..3c6a2e091 100644 --- a/unsupported/Eigen/CXX11/src/Tensor/TensorImagePatch.h +++ b/unsupported/Eigen/CXX11/src/Tensor/TensorImagePatch.h @@ -27,6 +27,7 @@ namespace Eigen { * patch_cols, and 1 for all the additional dimensions. */ namespace internal { + template struct traits > : public traits { @@ -71,12 +72,12 @@ class TensorImagePatchOp : public TensorBase, Device> RawAccess = false }; - EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorEvaluator(const XprType& op, const Device& device) + #ifdef __SYCL_DEVICE_ONLY__ + EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorEvaluator( const XprType op, const Device& device) + #else + EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorEvaluator( const XprType& op, const Device& device) + #endif : m_impl(op.expression(), device) #ifdef EIGEN_USE_SYCL , m_op(op) @@ -429,6 +452,7 @@ struct TensorEvaluator, Device> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const TensorEvaluator& impl() const { return m_impl; } #ifdef EIGEN_USE_SYCL + // Required by SYCL in order to construct the expression tree on the device EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const XprType& xpr() const { return m_op; } #endif @@ -511,10 +535,10 @@ struct TensorEvaluator, Device> Scalar m_paddingValue; TensorEvaluator m_impl; - -#ifdef EIGEN_USE_SYCL - const XprType& m_op; -#endif + #ifdef EIGEN_USE_SYCL + // Required for SYCL in order to construct the expression tree on the device + XprType m_op; + #endif }; diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorSyclExprConstructor.h b/unsupported/Eigen/CXX11/src/Tensor/TensorSyclExprConstructor.h index 24cc23f45..cbae4ea1d 100644 --- a/unsupported/Eigen/CXX11/src/Tensor/TensorSyclExprConstructor.h +++ b/unsupported/Eigen/CXX11/src/Tensor/TensorSyclExprConstructor.h @@ -448,8 +448,8 @@ struct ExprConstructor, CVQu template \ ExprConstructor(FuncDetector &funcD, const utility::tuple::Tuple &t)\ : xprExpr(funcD.xprExpr, t), expr(xprExpr.expr, funcD.m_patch_rows, funcD.m_patch_cols, funcD.m_row_strides, funcD.m_col_strides,\ - funcD.m_in_row_strides, funcD.m_in_col_strides, funcD.m_row_inflate_strides, funcD.m_col_inflate_strides, \ - funcD.m_padding_top, funcD.m_padding_bottom, funcD.m_padding_left, funcD.m_padding_right, funcD.m_padding_value, funcD.m_padding_type, funcD.m_padding_explicit){}\ + funcD.m_in_row_strides, funcD.m_in_col_strides, funcD.m_row_inflate_strides, funcD.m_col_inflate_strides, funcD.m_padding_explicit, \ + funcD.m_padding_top, funcD.m_padding_bottom, funcD.m_padding_left, funcD.m_padding_right, funcD.m_padding_type, funcD.m_padding_value){}\ }; SYCLTENSORIMAGEPATCHOPEXPR(const) @@ -468,8 +468,8 @@ struct ExprConstructor &t)\ : xprExpr(funcD.xprExpr, t), expr(xprExpr.expr, funcD.m_patch_planes, funcD.m_patch_rows, funcD.m_patch_cols, funcD.m_plane_strides, funcD.m_row_strides, funcD.m_col_strides,\ funcD.m_in_plane_strides, funcD.m_in_row_strides, funcD.m_in_col_strides,funcD.m_plane_inflate_strides, funcD.m_row_inflate_strides, funcD.m_col_inflate_strides, \ - funcD.m_padding_top_z, funcD.m_padding_bottom_z, funcD.m_padding_top, funcD.m_padding_bottom, funcD.m_padding_left, funcD.m_padding_right, funcD.m_padding_value,\ - funcD.m_padding_type, funcD.m_padding_explicit){\ + funcD.m_padding_explicit, funcD.m_padding_top_z, funcD.m_padding_bottom_z, funcD.m_padding_top, funcD.m_padding_bottom, funcD.m_padding_left, funcD.m_padding_right, \ + funcD.m_padding_type, funcD.m_padding_value ){\ }\ }; diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorVolumePatch.h b/unsupported/Eigen/CXX11/src/Tensor/TensorVolumePatch.h index a47db0b39..51c099591 100644 --- a/unsupported/Eigen/CXX11/src/Tensor/TensorVolumePatch.h +++ b/unsupported/Eigen/CXX11/src/Tensor/TensorVolumePatch.h @@ -22,6 +22,7 @@ namespace Eigen { * dimensions. */ namespace internal { + template struct traits > : public traits { @@ -34,6 +35,7 @@ struct traits > : public traits static const int NumDimensions = XprTraits::NumDimensions + 1; static const int Layout = XprTraits::Layout; typedef typename XprTraits::PointerType PointerType; + }; template @@ -66,12 +68,12 @@ class TensorVolumePatchOp : public TensorBase, D const TensorEvaluator& impl() const { return m_impl; } #ifdef EIGEN_USE_SYCL + // Required by SYCL in order to construct the expression on the device EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const XprType& xpr() const { return m_op; } #endif @@ -614,8 +635,10 @@ struct TensorEvaluator, D TensorEvaluator m_impl; #ifdef EIGEN_USE_SYCL +// Required by SYCL in order to construct the expression on the device XprType m_op; #endif + }; diff --git a/unsupported/test/cxx11_tensor_image_patch_sycl.cpp b/unsupported/test/cxx11_tensor_image_patch_sycl.cpp index e5ca4e388..eea18ec70 100644 --- a/unsupported/test/cxx11_tensor_image_patch_sycl.cpp +++ b/unsupported/test/cxx11_tensor_image_patch_sycl.cpp @@ -13,7 +13,7 @@ #define EIGEN_TEST_NO_LONGDOUBLE #define EIGEN_TEST_NO_COMPLEX -#define EIGEN_TEST_FUNC cxx11_tensor_image_patchOP_sycl +#define EIGEN_TEST_FUNC cxx11_tensor_image_patch_sycl #define EIGEN_DEFAULT_DENSE_INDEX_TYPE int64_t #define EIGEN_USE_SYCL @@ -1084,7 +1084,7 @@ test_patch_padding_same_sycl(sycl_device); test_patch_no_extra_dim_sycl(sycl_device); test_imagenet_patches_sycl(sycl_device); } -void test_cxx11_tensor_image_patchOP_sycl() +void test_cxx11_tensor_image_patch_sycl() { for (const auto& device :Eigen::get_sycl_supported_devices()) { CALL_SUBTEST(sycl_tensor_image_patch_test_per_device(device)); diff --git a/unsupported/test/cxx11_tensor_volume_patch_sycl.cpp b/unsupported/test/cxx11_tensor_volume_patch_sycl.cpp index ddc9e0d46..039715abc 100644 --- a/unsupported/test/cxx11_tensor_volume_patch_sycl.cpp +++ b/unsupported/test/cxx11_tensor_volume_patch_sycl.cpp @@ -13,7 +13,7 @@ #define EIGEN_TEST_NO_LONGDOUBLE #define EIGEN_TEST_NO_COMPLEX -#define EIGEN_TEST_FUNC cxx11_tensor_volume_patchOP_sycl +#define EIGEN_TEST_FUNC cxx11_tensor_volume_patch_sycl #define EIGEN_DEFAULT_DENSE_INDEX_TYPE int64_t #define EIGEN_USE_SYCL @@ -214,7 +214,7 @@ std::cout << "Running on " << s.template get_info( test_single_voxel_patch_sycl(sycl_device); test_entire_volume_patch_sycl(sycl_device); } -void test_cxx11_tensor_volume_patchOP_sycl() +void test_cxx11_tensor_volume_patch_sycl() { for (const auto& device :Eigen::get_sycl_supported_devices()) { CALL_SUBTEST(sycl_tensor_volume_patch_test_per_device(device));