diff options
author | Antonio Sanchez <cantonios@google.com> | 2021-03-11 11:23:00 -0800 |
---|---|---|
committer | Rasmus Munk Larsen <rmlarsen@google.com> | 2021-03-15 18:42:04 +0000 |
commit | d24f9f9b5523d3ace069fe0b271f5b694f37153a (patch) | |
tree | 9d4bb4779e060b78ffdf730f38aac800ead9ed92 /test/main.h | |
parent | 14487ed14e7e04cf1d84681274ae9d36fda23a39 (diff) |
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 `<complex>`.
Added this define to the tests and to `Eigen/Core`, but this will
not work if the user includes `<complex>` before `<Eigen/Core>`.
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
Diffstat (limited to 'test/main.h')
-rw-r--r-- | test/main.h | 2 |
1 files changed, 2 insertions, 0 deletions
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 <limits> #include <algorithm> +// Disable ICC's std::complex operator specializations so we can use our own. +#define _OVERRIDE_COMPLEX_SPECIALIZATION_ 1 #include <complex> #include <deque> #include <queue> |