2014-01-24 13:24:30 +01:00
|
|
|
|
|
|
|
|
namespace Eigen {
|
|
|
|
|
|
|
|
|
|
/** \page TopicCUDA Using Eigen in CUDA kernels
|
|
|
|
|
|
2026-02-18 12:23:41 -08:00
|
|
|
\section TopicCUDA_Overview Overview
|
|
|
|
|
|
|
|
|
|
%Eigen's fixed-size matrices, vectors, and arrays can be used inside CUDA and HIP kernels.
|
|
|
|
|
This is especially useful when working on numerous but small problems.
|
|
|
|
|
By default, when %Eigen's headers are included within a \c .cu file compiled by \c nvcc,
|
|
|
|
|
most of %Eigen's functions and methods are prefixed by the \c __device__ \c __host__ keywords
|
|
|
|
|
making them callable from both host and device code.
|
|
|
|
|
|
|
|
|
|
This support can be disabled by defining \c EIGEN_NO_CUDA (or \c EIGEN_NO_HIP for HIP)
|
|
|
|
|
before including any %Eigen header.
|
|
|
|
|
This might be useful to disable some warnings when a \c .cu file makes use of %Eigen on the host side only.
|
|
|
|
|
|
|
|
|
|
\warning Host SIMD vectorization must be disabled in \c .cu files. It is \b strongly
|
|
|
|
|
\b recommended to move all costly host-side computation from \c .cu files to regular \c .cpp files.
|
|
|
|
|
|
|
|
|
|
\section TopicCUDA_HIP HIP support
|
|
|
|
|
|
|
|
|
|
%Eigen also supports AMD's HIP compiler (\c hipcc). The same \c EIGEN_DEVICE_FUNC mechanism applies:
|
|
|
|
|
functions are annotated with \c __device__ \c __host__ when compiling with HIP.
|
|
|
|
|
Define \c EIGEN_NO_HIP to disable this. Internally, both CUDA and HIP are unified under the
|
|
|
|
|
\c EIGEN_GPUCC macro.
|
|
|
|
|
|
|
|
|
|
\section TopicCUDA_KnownIssues Known issues
|
|
|
|
|
|
|
|
|
|
- On 64-bit systems %Eigen uses \c long \c int as the default type for indexes and sizes.
|
|
|
|
|
On CUDA/HIP devices, it would make sense to default to 32-bit \c int.
|
|
|
|
|
However, to keep host and device code compatible, this cannot be done automatically by %Eigen,
|
|
|
|
|
and the user is thus required to define \c EIGEN_DEFAULT_DENSE_INDEX_TYPE to \c int throughout
|
|
|
|
|
their code (or only for device code if there is no interaction between host and device code
|
|
|
|
|
through %Eigen's objects).
|
2014-01-24 13:24:30 +01:00
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
}
|