aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Mehdi Goli <mehdi.goli@codeplay.com>2016-11-18 16:34:54 +0000
committerGravatar Mehdi Goli <mehdi.goli@codeplay.com>2016-11-18 16:34:54 +0000
commit15e226d7d3b80d89d04a5b51baaf5b5d2aaad589 (patch)
tree720065f8fb029ca7d93e0aa7a66f6330404d5067
parent622805a0c5d216141eca3090e80d58c159e175ee (diff)
adding Benoit changes on the TensorDeviceSycl.h
-rw-r--r--unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h15
-rw-r--r--unsupported/test/cxx11_tensor_device_sycl.cpp11
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 <typename DataType, int DataLayout>
void test_device_exceptions(const Eigen::SyclDevice &sycl_device) {
- bool threw_exception = false;
+ VERIFY(sycl_device.ok());
int sizeDim1 = 100;
array<int, 1> tensorDims = {{sizeDim1}};
DataType* gpu_data = static_cast<DataType*>(sycl_device.allocate(sizeDim1*sizeof(DataType)));
TensorMap<Tensor<DataType, 1,DataLayout>> in(gpu_data, tensorDims);
TensorMap<Tensor<DataType, 1,DataLayout>> 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);
}