Gromacs
2022.2
|
Reference SIMD implementation, including SIMD documentation.
Macros | |
SIMD implementation capability definitions | |
#define | GMX_SIMD 1 |
1 if any SIMD support is present, otherwise 0. | |
#define | GMX_SIMD_HAVE_FLOAT 1 |
1 when SIMD float support is present, otherwise 0 More... | |
#define | GMX_SIMD_HAVE_DOUBLE 1 |
1 if SIMD double support is present, otherwise 0 | |
#define | GMX_SIMD_HAVE_LOADU 1 |
1 if the SIMD implementation supports unaligned loads, otherwise 0 | |
#define | GMX_SIMD_HAVE_STOREU 1 |
1 if the SIMD implementation supports unaligned stores, otherwise 0 | |
#define | GMX_SIMD_HAVE_FMA 0 |
1 if the SIMD implementation has fused-multiply add hardware More... | |
#define | GMX_SIMD_HAVE_LOGICAL 1 |
1 if SIMD impl has logical operations on floating-point data, otherwise 0 | |
#define | GMX_SIMD_HAVE_FINT32_EXTRACT 1 |
Support for extracting integers from gmx::SimdFInt32 (1/0 for present/absent) | |
#define | GMX_SIMD_HAVE_FINT32_LOGICAL 1 |
1 if SIMD logical ops are supported for gmx::SimdFInt32, otherwise 0 | |
#define | GMX_SIMD_HAVE_FINT32_ARITHMETICS 1 |
1 if SIMD arithmetic ops are supported for gmx::SimdFInt32, otherwise 0 | |
#define | GMX_SIMD_HAVE_DINT32_EXTRACT 1 |
Support for extracting integer from gmx::SimdDInt32 (1/0 for present/absent) | |
#define | GMX_SIMD_HAVE_DINT32_LOGICAL 1 |
1 if logical operations are supported for gmx::SimdDInt32, otherwise 0 | |
#define | GMX_SIMD_HAVE_DINT32_ARITHMETICS 1 |
1 if SIMD arithmetic ops are supported for gmx::SimdDInt32, otherwise 0 | |
#define | GMX_SIMD_HAVE_NATIVE_COPYSIGN_FLOAT 0 |
1 if implementation provides single precision copysign() More... | |
#define | GMX_SIMD_HAVE_NATIVE_RSQRT_ITER_FLOAT 0 |
1 if implementation provides single precision 1/sqrt(x) N-R iterations faster than simd_math.h More... | |
#define | GMX_SIMD_HAVE_NATIVE_RCP_ITER_FLOAT 0 |
1 if implementation provides single precision 1/x N-R iterations faster than simd_math.h More... | |
#define | GMX_SIMD_HAVE_NATIVE_LOG_FLOAT 0 |
1 if implementation provides single precision log() faster than simd_math.h More... | |
#define | GMX_SIMD_HAVE_NATIVE_EXP2_FLOAT 0 |
1 if implementation provides single precision exp2() faster than simd_math.h More... | |
#define | GMX_SIMD_HAVE_NATIVE_EXP_FLOAT 0 |
1 if implementation provides single precision exp() faster than simd_math.h More... | |
#define | GMX_SIMD_HAVE_NATIVE_COPYSIGN_DOUBLE 0 |
1 if implementation provides double precision copysign() More... | |
#define | GMX_SIMD_HAVE_NATIVE_RSQRT_ITER_DOUBLE 0 |
1 if implementation provides double precision 1/sqrt(x) N-R iterations faster than simd_math.h More... | |
#define | GMX_SIMD_HAVE_NATIVE_RCP_ITER_DOUBLE 0 |
1 if implementation provides double precision 1/x N-R iterations faster than simd_math.h More... | |
#define | GMX_SIMD_HAVE_NATIVE_LOG_DOUBLE 0 |
1 if implementation provides double precision log() faster than simd_math.h More... | |
#define | GMX_SIMD_HAVE_NATIVE_EXP2_DOUBLE 0 |
1 if implementation provides double precision exp2() faster than simd_math.h More... | |
#define | GMX_SIMD_HAVE_NATIVE_EXP_DOUBLE 0 |
1 if implementation provides double precision exp() faster than simd_math.h More... | |
#define | GMX_SIMD_HAVE_GATHER_LOADU_BYSIMDINT_TRANSPOSE_FLOAT 1 |
1 if gmx::gatherLoadUBySimdIntTranspose is present, otherwise 0 | |
#define | GMX_SIMD_HAVE_GATHER_LOADU_BYSIMDINT_TRANSPOSE_DOUBLE 1 |
1 if gmx::gatherLoadUBySimdIntTranspose is present, otherwise 0 | |
#define | GMX_SIMD_HAVE_HSIMD_UTIL_FLOAT 1 |
1 if float half-register load/store/reduce utils present, otherwise 0 | |
#define | GMX_SIMD_HAVE_HSIMD_UTIL_DOUBLE 1 |
1 if double half-register load/store/reduce utils present, otherwise 0 | |
#define | GMX_SIMD_FLOAT_WIDTH 4 |
Width of the gmx::SimdFloat datatype. | |
#define | GMX_SIMD_DOUBLE_WIDTH 4 |
Width of the gmx::SimdDouble datatype. | |
#define | GMX_SIMD_HAVE_4NSIMD_UTIL_FLOAT 1 |
1 if float 4xN load utils present, otherwise 0 | |
#define | GMX_SIMD_HAVE_4NSIMD_UTIL_DOUBLE 1 |
1 if double 4xN load utils present, otherwise 0 | |
#define | GMX_SIMD4_HAVE_FLOAT 1 |
1 if implementation provides gmx::Simd4Float, otherwise 0. | |
#define | GMX_SIMD4_HAVE_DOUBLE 1 |
1 if the implementation provides gmx::Simd4Double, otherwise 0. | |
#define | GMX_SIMD_FINT32_WIDTH GMX_SIMD_FLOAT_WIDTH |
Width of the gmx::SimdFInt32 datatype. | |
#define | GMX_SIMD_DINT32_WIDTH GMX_SIMD_DOUBLE_WIDTH |
Width of the gmx::SimdDInt32 datatype. | |
#define | GMX_SIMD4_WIDTH 4 |
The SIMD4 type is always four units wide, but this makes code more explicit. | |
#define | GMX_SIMD_ALIGNMENT (GMX_SIMD_FLOAT_WIDTH * 4) |
Maximum required alignment in bytes for aligned load/store of multiple values (maximum required for either float or double). | |
#define | GMX_SIMD_RSQRT_BITS 23 |
Accuracy of SIMD 1/sqrt(x) lookup. Used to determine number of iterations. | |
#define | GMX_SIMD_RCP_BITS 23 |
Accuracy of SIMD 1/x lookup. Used to determine number of iterations. | |
#define GMX_SIMD_HAVE_FLOAT 1 |
1 when SIMD float support is present, otherwise 0
You should only use this to specifically check for single precision SIMD, support, even when the rest of Gromacs uses double precision.
#define GMX_SIMD_HAVE_FMA 0 |
1 if the SIMD implementation has fused-multiply add hardware
#define GMX_SIMD_HAVE_NATIVE_COPYSIGN_DOUBLE 0 |
1 if implementation provides double precision copysign()
Only used in simd_math.h to selectively override the generic implementation.
#define GMX_SIMD_HAVE_NATIVE_COPYSIGN_FLOAT 0 |
1 if implementation provides single precision copysign()
Only used in simd_math.h to selectively override the generic implementation.
#define GMX_SIMD_HAVE_NATIVE_EXP2_DOUBLE 0 |
1 if implementation provides double precision exp2() faster than simd_math.h
Only used in simd_math.h to selectively override the generic implementation.
#define GMX_SIMD_HAVE_NATIVE_EXP2_FLOAT 0 |
1 if implementation provides single precision exp2() faster than simd_math.h
Only used in simd_math.h to selectively override the generic implementation.
#define GMX_SIMD_HAVE_NATIVE_EXP_DOUBLE 0 |
1 if implementation provides double precision exp() faster than simd_math.h
Only used in simd_math.h to selectively override the generic implementation.
#define GMX_SIMD_HAVE_NATIVE_EXP_FLOAT 0 |
1 if implementation provides single precision exp() faster than simd_math.h
Only used in simd_math.h to selectively override the generic implementation.
#define GMX_SIMD_HAVE_NATIVE_LOG_DOUBLE 0 |
1 if implementation provides double precision log() faster than simd_math.h
Only used in simd_math.h to selectively override the generic implementation.
#define GMX_SIMD_HAVE_NATIVE_LOG_FLOAT 0 |
1 if implementation provides single precision log() faster than simd_math.h
Only used in simd_math.h to selectively override the generic implementation.
#define GMX_SIMD_HAVE_NATIVE_RCP_ITER_DOUBLE 0 |
1 if implementation provides double precision 1/x N-R iterations faster than simd_math.h
Only used in simd_math.h to selectively override the generic implementation.
#define GMX_SIMD_HAVE_NATIVE_RCP_ITER_FLOAT 0 |
1 if implementation provides single precision 1/x N-R iterations faster than simd_math.h
Only used in simd_math.h to selectively override the generic implementation.
#define GMX_SIMD_HAVE_NATIVE_RSQRT_ITER_DOUBLE 0 |
1 if implementation provides double precision 1/sqrt(x) N-R iterations faster than simd_math.h
Only used in simd_math.h to selectively override the generic implementation.
#define GMX_SIMD_HAVE_NATIVE_RSQRT_ITER_FLOAT 0 |
1 if implementation provides single precision 1/sqrt(x) N-R iterations faster than simd_math.h
Only used in simd_math.h to selectively override the generic implementation.