mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-11 19:29:02 +08:00
[SYCL] :
* Modifying TensorDeviceSYCL to use `EIGEN_THROW_X`. * Modifying TensorMacro to use `EIGEN_TRY/CATCH(X)` macro. * Modifying TensorReverse.h to use `EIGEN_DEVICE_REF` instead of `&`. * Fixing the SYCL device macro in SpecialFunctionsImpl.h.
This commit is contained in:
parent
81a03bec75
commit
9ea490c82c
@ -16,6 +16,7 @@
|
|||||||
#define EIGEN_CXX11_TENSOR_TENSOR_DEVICE_SYCL_H
|
#define EIGEN_CXX11_TENSOR_TENSOR_DEVICE_SYCL_H
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
|
|
||||||
|
|
||||||
namespace Eigen {
|
namespace Eigen {
|
||||||
|
|
||||||
namespace TensorSycl {
|
namespace TensorSycl {
|
||||||
@ -676,21 +677,12 @@ class QueueInterface {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sycl_async_handler(cl::sycl::exception_list l) const {
|
bool sycl_async_handler(cl::sycl::exception_list exceptions) const {
|
||||||
bool exception_caught = false;
|
bool exception_caught = false;
|
||||||
for (const auto &e : l) {
|
for (const auto &e : exceptions) {
|
||||||
if (e) {
|
if (e) {
|
||||||
exception_caught = true;
|
exception_caught = true;
|
||||||
#ifdef EIGEN_EXCEPTIONS
|
EIGEN_THROW_X(e);
|
||||||
try {
|
|
||||||
std::rethrow_exception(e);
|
|
||||||
} catch (const cl::sycl::exception &e) {
|
|
||||||
std::cerr << e.what() << std::endl;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
std::cerr << "Error detected inside Sycl device." << std::endl;
|
|
||||||
abort();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return exception_caught;
|
return exception_caught;
|
||||||
|
@ -67,20 +67,16 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Define a macro for catching SYCL exceptions if exceptions are enabled
|
// Define a macro for catching SYCL exceptions if exceptions are enabled
|
||||||
#if defined(EIGEN_EXCEPTIONS)
|
#define EIGEN_SYCL_TRY_CATCH(X) \
|
||||||
#define EIGEN_SYCL_TRY_CATCH(X) \
|
do { \
|
||||||
do { \
|
EIGEN_TRY {X;} \
|
||||||
try { X; } \
|
EIGEN_CATCH(const cl::sycl::exception& e) { \
|
||||||
catch(const cl::sycl::exception& e) { \
|
EIGEN_THROW_X(std::runtime_error("SYCL exception at " + \
|
||||||
std::cerr << "SYCL exception at " \
|
std::string(__FILE__) + ":" + \
|
||||||
<< __FILE__ << ":" << __LINE__ << std::endl \
|
std::to_string(__LINE__) + "\n" + \
|
||||||
<< e.what() << std::endl; \
|
e.what())); \
|
||||||
std::rethrow_exception(std::current_exception()); \
|
} \
|
||||||
} \
|
} while (false)
|
||||||
} while (false)
|
|
||||||
#else
|
|
||||||
#define EIGEN_SYCL_TRY_CATCH(X) X
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Define a macro if local memory flags are unset or one of them is set
|
// Define a macro if local memory flags are unset or one of them is set
|
||||||
// Setting both flags is the same as unsetting them
|
// Setting both flags is the same as unsetting them
|
||||||
|
@ -380,7 +380,7 @@ struct TensorEvaluator<const TensorReverseOp<ReverseDimensions, ArgType>, Device
|
|||||||
array<IndexDivisor, NumDims> m_fastStrides;
|
array<IndexDivisor, NumDims> m_fastStrides;
|
||||||
TensorEvaluator<ArgType, Device> m_impl;
|
TensorEvaluator<ArgType, Device> m_impl;
|
||||||
ReverseDimensions m_reverse;
|
ReverseDimensions m_reverse;
|
||||||
const Device& m_device;
|
const Device EIGEN_DEVICE_REF m_device;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Eval as lvalue
|
// Eval as lvalue
|
||||||
|
@ -193,7 +193,7 @@ struct lgamma_impl<float> {
|
|||||||
#if !defined(EIGEN_GPU_COMPILE_PHASE) && (defined(_BSD_SOURCE) || defined(_SVID_SOURCE)) && !defined(__APPLE__)
|
#if !defined(EIGEN_GPU_COMPILE_PHASE) && (defined(_BSD_SOURCE) || defined(_SVID_SOURCE)) && !defined(__APPLE__)
|
||||||
int dummy;
|
int dummy;
|
||||||
return ::lgammaf_r(x, &dummy);
|
return ::lgammaf_r(x, &dummy);
|
||||||
#elif defined(EIGEN_USE_SYCL) && defined(__SYCL_DEVICE_ONLY__)
|
#elif defined(SYCL_DEVICE_ONLY)
|
||||||
return cl::sycl::lgamma(x);
|
return cl::sycl::lgamma(x);
|
||||||
#else
|
#else
|
||||||
return ::lgammaf(x);
|
return ::lgammaf(x);
|
||||||
@ -208,7 +208,7 @@ struct lgamma_impl<double> {
|
|||||||
#if !defined(EIGEN_GPU_COMPILE_PHASE) && (defined(_BSD_SOURCE) || defined(_SVID_SOURCE)) && !defined(__APPLE__)
|
#if !defined(EIGEN_GPU_COMPILE_PHASE) && (defined(_BSD_SOURCE) || defined(_SVID_SOURCE)) && !defined(__APPLE__)
|
||||||
int dummy;
|
int dummy;
|
||||||
return ::lgamma_r(x, &dummy);
|
return ::lgamma_r(x, &dummy);
|
||||||
#elif defined(EIGEN_USE_SYCL) && defined(__SYCL_DEVICE_ONLY__)
|
#elif defined(SYCL_DEVICE_ONLY)
|
||||||
return cl::sycl::lgamma(x);
|
return cl::sycl::lgamma(x);
|
||||||
#else
|
#else
|
||||||
return ::lgamma(x);
|
return ::lgamma(x);
|
||||||
@ -428,7 +428,7 @@ template <>
|
|||||||
struct erf_impl<float> {
|
struct erf_impl<float> {
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
static EIGEN_STRONG_INLINE float run(float x) {
|
static EIGEN_STRONG_INLINE float run(float x) {
|
||||||
#if defined(EIGEN_USE_SYCL) && defined(__SYCL_DEVICE_ONLY__)
|
#if defined(SYCL_DEVICE_ONLY)
|
||||||
return cl::sycl::erf(x);
|
return cl::sycl::erf(x);
|
||||||
#else
|
#else
|
||||||
return ::erff(x);
|
return ::erff(x);
|
||||||
@ -440,7 +440,7 @@ template <>
|
|||||||
struct erf_impl<double> {
|
struct erf_impl<double> {
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
static EIGEN_STRONG_INLINE double run(double x) {
|
static EIGEN_STRONG_INLINE double run(double x) {
|
||||||
#if defined(EIGEN_USE_SYCL) && defined(__SYCL_DEVICE_ONLY__)
|
#if defined(SYCL_DEVICE_ONLY)
|
||||||
return cl::sycl::erf(x);
|
return cl::sycl::erf(x);
|
||||||
#else
|
#else
|
||||||
return ::erf(x);
|
return ::erf(x);
|
||||||
@ -473,7 +473,7 @@ template <>
|
|||||||
struct erfc_impl<float> {
|
struct erfc_impl<float> {
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
static EIGEN_STRONG_INLINE float run(const float x) {
|
static EIGEN_STRONG_INLINE float run(const float x) {
|
||||||
#if defined(EIGEN_USE_SYCL) && defined(__SYCL_DEVICE_ONLY__)
|
#if defined(SYCL_DEVICE_ONLY)
|
||||||
return cl::sycl::erfc(x);
|
return cl::sycl::erfc(x);
|
||||||
#else
|
#else
|
||||||
return ::erfcf(x);
|
return ::erfcf(x);
|
||||||
@ -485,7 +485,7 @@ template <>
|
|||||||
struct erfc_impl<double> {
|
struct erfc_impl<double> {
|
||||||
EIGEN_DEVICE_FUNC
|
EIGEN_DEVICE_FUNC
|
||||||
static EIGEN_STRONG_INLINE double run(const double x) {
|
static EIGEN_STRONG_INLINE double run(const double x) {
|
||||||
#if defined(EIGEN_USE_SYCL) && defined(__SYCL_DEVICE_ONLY__)
|
#if defined(SYCL_DEVICE_ONLY)
|
||||||
return cl::sycl::erfc(x);
|
return cl::sycl::erfc(x);
|
||||||
#else
|
#else
|
||||||
return ::erfc(x);
|
return ::erfc(x);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user