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
struct unavailable
#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.

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 fma4 : public turbo::simd::sse4_2
#include <fma4_register.h>

SSE4.2 + FMA4 instructions.

struct neon64 : public turbo::simd::neon
#include <neon64_register.h>

NEON instructions for arm64.

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

template<size_t Width>
struct sve : public turbo::simd::generic
#include <sve_register.h>

SVE instructions (fixed vector size) for arm64.