aboutsummaryrefslogtreecommitdiff
path: root/ports/eigen3/fix-cuda-error.patch
diff options
context:
space:
mode:
Diffstat (limited to 'ports/eigen3/fix-cuda-error.patch')
-rw-r--r--ports/eigen3/fix-cuda-error.patch30
1 files changed, 30 insertions, 0 deletions
diff --git a/ports/eigen3/fix-cuda-error.patch b/ports/eigen3/fix-cuda-error.patch
new file mode 100644
index 000000000..9123806df
--- /dev/null
+++ b/ports/eigen3/fix-cuda-error.patch
@@ -0,0 +1,30 @@
+diff --git a/Eigen/src/Core/arch/CUDA/Half.h b/Eigen/src/Core/arch/CUDA/Half.h
+index 755e620..85e445b 100644
+--- a/Eigen/src/Core/arch/CUDA/Half.h
++++ b/Eigen/src/Core/arch/CUDA/Half.h
+@@ -209,7 +209,11 @@ namespace half_impl {
+ // conversion steps back and forth.
+
+ EIGEN_STRONG_INLINE __device__ half operator + (const half& a, const half& b) {
++#if defined(EIGEN_CUDACC_VER) && EIGEN_CUDACC_VER >= 90000
++ return __hadd(::__half(a), ::__half(b));
++#else
+ return __hadd(a, b);
++#endif
+ }
+ EIGEN_STRONG_INLINE __device__ half operator * (const half& a, const half& b) {
+ return __hmul(a, b);
+@@ -218,9 +222,13 @@ EIGEN_STRONG_INLINE __device__ half operator - (const half& a, const half& b) {
+ return __hsub(a, b);
+ }
+ EIGEN_STRONG_INLINE __device__ half operator / (const half& a, const half& b) {
++#if defined(EIGEN_CUDACC_VER) && EIGEN_CUDACC_VER >= 90000
++ return __hdiv(a, b);
++#else
+ float num = __half2float(a);
+ float denom = __half2float(b);
+ return __float2half(num / denom);
++#endif
+ }
+ EIGEN_STRONG_INLINE __device__ half operator - (const half& a) {
+ return __hneg(a);