From 15e226d7d3b80d89d04a5b51baaf5b5d2aaad589 Mon Sep 17 00:00:00 2001 From: Mehdi Goli Date: Fri, 18 Nov 2016 16:34:54 +0000 Subject: [PATCH] adding Benoit changes on the TensorDeviceSycl.h --- .../Eigen/CXX11/src/Tensor/TensorDeviceSycl.h | 15 ++++++++++++++- unsupported/test/cxx11_tensor_device_sycl.cpp | 11 ++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h b/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h index d6d127153..ec7d80c7c 100644 --- a/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h +++ b/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h @@ -21,6 +21,8 @@ namespace Eigen { struct QueueInterface { /// class members: + bool exception_caught_ = false; + /// std::map is the container used to make sure that we create only one buffer /// per pointer. The lifespan of the buffer now depends on the lifespan of SyclDevice. /// If a non-read-only pointer is needed to be accessed on the host we should manually deallocate it. @@ -35,7 +37,7 @@ struct QueueInterface { for (const auto& e : l) { try { if(e){ - std::rethrow_exception(e); + exception_caught_ = true;; } } catch (cl::sycl::exception e) { std::cerr << e.what() << std::endl; @@ -86,6 +88,11 @@ struct QueueInterface { //return buffer_map.end(); } + // This function checks if the runtime recorded an error for the + // underlying stream device. + EIGEN_STRONG_INLINE bool ok() const { + return !exception_caught_; + } // destructor ~QueueInterface() { buffer_map.clear(); } }; @@ -227,8 +234,14 @@ struct SyclDevice { EIGEN_STRONG_INLINE void synchronize() const { sycl_queue().wait_and_throw(); } + // This function checks if the runtime recorded an error for the + // underlying stream device. + EIGEN_STRONG_INLINE bool ok() const { + return m_queu_stream->ok(); + } }; + } // end namespace Eigen #endif // EIGEN_CXX11_TENSOR_TENSOR_DEVICE_SYCL_H diff --git a/unsupported/test/cxx11_tensor_device_sycl.cpp b/unsupported/test/cxx11_tensor_device_sycl.cpp index a51062d23..2f8cfa081 100644 --- a/unsupported/test/cxx11_tensor_device_sycl.cpp +++ b/unsupported/test/cxx11_tensor_device_sycl.cpp @@ -41,18 +41,15 @@ void test_device_sycl(const Eigen::SyclDevice &sycl_device) { template void test_device_exceptions(const Eigen::SyclDevice &sycl_device) { - bool threw_exception = false; + VERIFY(sycl_device.ok()); int sizeDim1 = 100; array tensorDims = {{sizeDim1}}; DataType* gpu_data = static_cast(sycl_device.allocate(sizeDim1*sizeof(DataType))); TensorMap> in(gpu_data, tensorDims); TensorMap> out(gpu_data, tensorDims); - try { - out.device(sycl_device) = in / in.constant(0); - } catch(...) { - threw_exception = true; - } - VERIFY(threw_exception); + + out.device(sycl_device) = in / in.constant(0); + VERIFY(!sycl_device.ok()); sycl_device.deallocate(gpu_data); }