NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
simd/types.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_SIMD_TYPES_HPP__
2#define NEFORCE_CORE_SIMD_TYPES_HPP__
3
11
13#if defined(NEFORCE_SIMD_AVX2) || defined(NEFORCE_SIMD_AVX512F)
14# include <immintrin.h>
15#elif defined(NEFORCE_SIMD_SSE2)
16# include <emmintrin.h>
17#elif defined(NEFORCE_SIMD_NEON)
18# include <arm_neon.h>
19#endif
20NEFORCE_BEGIN_NAMESPACE__
21NEFORCE_BEGIN_SIMD__
22
28
29#ifdef NEFORCE_SIMD_SSE2
31using vec128_t = ::__m128i;
33using vec128f_t = ::__m128;
35using vec128d_t = ::__m128d;
36#elif defined(NEFORCE_SIMD_NEON)
38using vec128_t = ::uint8x16_t;
40using vec128f_t = ::float32x4_t;
41# ifdef __aarch64__
43using vec128d_t = ::float64x2_t;
44# else
46struct vec128d_t {
47 double data[2];
48};
49# endif
50#else
52struct vec128_t {
53 byte_t data[16];
54};
56struct vec128f_t {
57 float data[4];
58};
60struct vec128d_t {
61 double data[2];
62};
63#endif
64
65#if defined(NEFORCE_SIMD_AVX2) || defined(NEFORCE_SIMD_AVX)
67# ifdef NEFORCE_SIMD_AVX2
68using vec256_t = ::__m256i;
69# else
71struct vec256_t {
72 byte_t data[32];
73};
74# endif
76using vec256f_t = ::__m256;
78using vec256d_t = ::__m256d;
79#else
81struct vec256_t {
82 byte_t data[32];
83};
85struct vec256f_t {
86 float data[8];
87};
89struct vec256d_t {
90 double data[4];
91};
92#endif
93
94#ifdef NEFORCE_SIMD_AVX512F
96using vec512_t = ::__m512i;
98using vec512f_t = ::__m512;
100using vec512d_t = ::__m512d;
101#else
103struct vec512_t {
104 byte_t data[64];
105};
107struct vec512f_t {
108 float data[16];
109};
111struct vec512d_t {
112 double data[8];
113};
114#endif
115 // SIMD
117
118NEFORCE_END_SIMD__
119NEFORCE_END_NAMESPACE__
120#endif // NEFORCE_CORE_SIMD_TYPES_HPP__
unsigned char byte_t
字节类型,定义为无符号字符
::__m128i vec128_t
128-bit 整型向量(16×i8 / 8×i16 / 4×i32 / 2×i64)
::__m128 vec128f_t
128-bit 单精度浮点向量(4×f32)
::__m128d vec128d_t
128-bit 双精度浮点向量(2×f64)
::__m256i vec256_t
256-bit 整型向量(32×i8 / 16×i16 / 8×i32 / 4×i64,需 AVX2)
::__m512i vec512_t
512-bit 整型向量(64×i8 / 32×i16 / 16×i32 / 8×i64)
::__m512 vec512f_t
512-bit 单精度浮点向量(16×f32)
::__m256d vec256d_t
256-bit 双精度浮点向量(4×f64)
::__m512d vec512d_t
512-bit 双精度浮点向量(8×f64)
::__m256 vec256f_t
256-bit 单精度浮点向量(8×f32)
constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
基本类型别名