Architecture manipulation¶
turbo’s simd provides an high level description of the instruction sets it manipulates.
The mentionned types are primarily used as template parameters for batch, and when interacting with turbo::simd::dispatch().
The best available architecture is available at compile time through
turbo::simd::best_arch which also happens to be turbo::simd::default_arch.
- group architectures
- #include <simd_arch.h>
Dummy architectures that only appears in a list of architecture when no other architecture has been detected.
-
struct generic¶
- #include <generic_arch.h>
Base class for all architectures.
Subclassed by turbo::simd::avx, turbo::simd::avx512f, turbo::simd::detail::sve< Width >, turbo::simd::neon, turbo::simd::sse2
Public Static Functions
-
static inline constexpr bool supported() noexcept¶
Whether this architecture is supported at compile-time.
-
static inline constexpr bool available() noexcept¶
Whether this architecture is available at run-time.
-
static inline constexpr std::size_t alignment() noexcept¶
If this architectures supports aligned memory accesses, the required alignment.
-
static inline constexpr bool requires_alignment() noexcept¶
Whether this architecture requires aligned memory access.
-
static inline constexpr unsigned version() noexcept¶
Unique identifier for this architecture.
-
static inline constexpr char const *name() noexcept¶
Name of the architecture.
-
static inline constexpr bool supported() noexcept¶
-
struct avx2 : public turbo::simd::avx¶
- #include <avx2_register.h>
AVX2 instructions.
Subclassed by turbo::simd::fma3< avx2 >
-
struct avx512bw : public turbo::simd::avx512dq¶
- #include <avx512bw_register.h>
AVX512BW instructions.
-
struct avx512cd : public turbo::simd::avx512f¶
- #include <avx512cd_register.h>
AVX512CD instructions.
Subclassed by turbo::simd::avx512dq
-
struct avx512dq : public turbo::simd::avx512cd¶
- #include <avx512dq_register.h>
AVX512DQ instructions.
Subclassed by turbo::simd::avx512bw
-
struct avx512f : public turbo::simd::generic¶
- #include <avx512f_register.h>
AVX512F instructions.
Subclassed by turbo::simd::avx512cd
-
struct avx : public turbo::simd::generic¶
- #include <avx_register.h>
AVX instructions.
Subclassed by turbo::simd::avx2, turbo::simd::fma3< avx >
-
template<>
struct fma3<avx> : public turbo::simd::avx¶ - #include <fma3_avx_register.h>
AVX + FMA instructions.
-
template<>
struct fma3<avx2> : public turbo::simd::avx2¶ - #include <fma3_avx2_register.h>
AVX2 + FMA instructions.
-
template<>
struct fma3<sse4_2> : public turbo::simd::sse4_2¶ - #include <fma3_sse_register.h>
SSE4.2 + FMA instructions.
-
struct neon : public turbo::simd::generic¶
- #include <neon_register.h>
NEON instructions for arm32.
Subclassed by turbo::simd::neon64
-
struct sse2 : public turbo::simd::generic¶
- #include <sse2_register.h>
SSE2 instructions.
Subclassed by turbo::simd::sse3
-
struct sse3 : public turbo::simd::sse2¶
- #include <sse3_register.h>
SSE3 instructions.
Subclassed by turbo::simd::ssse3
-
struct sse4_1 : public turbo::simd::ssse3¶
- #include <sse4_1_register.h>
SSE4.1 instructions.
Subclassed by turbo::simd::sse4_2
-
struct sse4_2 : public turbo::simd::sse4_1¶
- #include <sse4_2_register.h>
SSE4.2 instructions.
Subclassed by turbo::simd::fma3< sse4_2 >, turbo::simd::fma4
-
struct ssse3 : public turbo::simd::sse3¶
- #include <ssse3_register.h>
SSSE3 instructions.
Subclassed by turbo::simd::sse4_1