From d24f9f9b5523d3ace069fe0b271f5b694f37153a Mon Sep 17 00:00:00 2001 From: Antonio Sanchez Date: Thu, 11 Mar 2021 11:23:00 -0800 Subject: Fix NVCC+ICC issues. NVCC does not understand `__forceinline`, so we need to use `inline` when compiling for GPU. ICC specializes `std::complex` operators for `float` and `double` by default, which cannot be used on device and conflict with Eigen's workaround in CUDA/Complex.h. This can be prevented by defining `_OVERRIDE_COMPLEX_SPECIALIZATION_` before including ``. Added this define to the tests and to `Eigen/Core`, but this will not work if the user includes `` before ``. ICC also seems to generate a duplicate `Map` symbol in `PlainObjectBase`: ``` error: "Map" has already been declared in the current scope static ConstMapType Map(const Scalar *data) ``` I tracked this down to `friend class Eigen::Map`. Putting the `friend` statements at the bottom of the class seems to resolve this issue. Fixes #2180 --- test/main.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'test/main.h') diff --git a/test/main.h b/test/main.h index cf061730f..3e80c9f7d 100644 --- a/test/main.h +++ b/test/main.h @@ -40,6 +40,8 @@ // definitions. #include #include +// Disable ICC's std::complex operator specializations so we can use our own. +#define _OVERRIDE_COMPLEX_SPECIALIZATION_ 1 #include #include #include -- cgit v1.2.3