| \c EIGEN_USE_BLAS | Enables the use of external BLAS level 2 and 3 routines (AOCL-BLIS) |
| \c EIGEN_USE_LAPACKE | Enables the use of external LAPACK routines via the LAPACKE C interface (AOCL-FLAME) |
| \c EIGEN_USE_LAPACKE_STRICT | Same as \c EIGEN_USE_LAPACKE but algorithms of lower robustness are disabled. \n This currently concerns only JacobiSVD which would be replaced by \c gesvd. |
| \c EIGEN_USE_AOCL_VML | Enables the use of AOCL LibM vector math operations for coefficient-wise functions |
| \c EIGEN_USE_AOCL_ALL | Defines \c EIGEN_USE_BLAS, \c EIGEN_USE_LAPACKE, and \c EIGEN_USE_AOCL_VML |
| \c EIGEN_USE_AOCL_MT | Equivalent to \c EIGEN_USE_AOCL_ALL, but ensures multi-threaded BLIS (\c libblis-mt) is used. \n \b Recommended for most applications. |
\note The AOCL integration automatically enables optimizations when the matrix/vector size exceeds \c EIGEN_AOCL_VML_THRESHOLD (default: 128 elements). For smaller operations, Eigen's built-in vectorization may be faster due to function call overhead.
\section TopicUsingAOCL_Performance Performance Considerations
The \c EIGEN_USE_BLAS and \c EIGEN_USE_LAPACKE macros can be combined with AOCL-specific optimizations:
- **Multi-threading**: Use \c EIGEN_USE_AOCL_MT to automatically select the multi-threaded BLIS library
- **Architecture targeting**: AOCL libraries are optimized for AMD Zen architectures (Zen, Zen2, Zen3, Zen4, Zen5)
- **Vector Math Library**: AOCL LibM provides vectorized implementations that can operate on entire arrays simultaneously
- **Memory layout**: Eigen's column-major storage directly matches AOCL's expected data layout for zero-copy operation
\section TopicUsingAOCL_Types Supported Data Types and Sizes
AOCL acceleration is applied to:
- **Scalar types**: \c float, \c double, \c complex