std::basic_simd, std::simd
来自 cppreference.cn
定义于头文件 <simd> |
||
template< class T, class Abi = /*native-abi*/<T> > class basic_simd; |
(1) | (C++26 起) |
template< class T, /*simd-size-type*/ N = /*simd-size-v*/<T, /*native-abi*/<T>> > using simd = basic_simd<T, /*deduce-abi-t*/<T, N>>; |
(2) | (C++26 起) |
1)
std::basic_simd
特化是一种数据并行类型。默认的 ABI 标签在编译时由实现确定。2)
std::simd
是一个别名模板,允许用户指定宽度为特定大小。默认宽度在编译时由实现确定。basic_simd
的每个特化都是一个完整的类型。该特化为
- * **启用**,如果 `T` 是一个 可向量化类型,并且存在范围 `[1, 64]` 内的值 `M`,使得 `Abi` 是 deduce-abi-t<T, M>,
- * **禁用**,如果 `T` 不是可向量化类型,
- * 否则,如果该特化是否启用,由实现定义。
如果 basic_simd<T, Abi> 被禁用,则该特化拥有所有被删除的默认构造函数、析构函数、复制构造函数和复制赋值函数。此外,只有以下成员类型存在。
如果 basic_simd<T, Abi> 被启用,则 basic_simd<T, Abi> 是 可平凡复制的(TriviallyCopyable)。
目录 |
[编辑] 模板参数
T | - | 元素类型;一个可向量化类型 |
Abi | - | 标签类型,用于确定宽度和存储方式 |
N | - | 数据并行类型的宽度;元素的数量 |
[编辑] 成员类型
类型 | 定义 |
value_type
|
T
|
mask_type
|
std::basic_simd_mask<sizeof(T), Abi> |
abi_type
|
Abi
|
[编辑] 成员常量
名称 | 描述 |
constexpr std::integral_constant< simd-size-type , simd-size-v <T, Abi>> size[静态] |
basic_simd 的宽度(public static 成员常量) |
[编辑] 成员函数
构造一个 basic_simd 对象(public member function) | |
访问指定的元素 (public member function) | |
逐元素递增和递减 (public member function) | |
逐元素一元运算符 (public member function) |
[编辑] 非成员函数
逐元素二元运算符 (函数) | |
逐元素复合二元运算符 (函数) | |
逐元素关系运算符 (函数) | |
(C++26) |
为 simd_select 特化逐元素选择(仅供说明的函数*) |
[编辑] 推导指南
template< class R, class... Ts > basic_simd( R&& r, Ts... ) -> /* 见下文 */; |
(C++26 起) | |
只有当以下条件满足时,推导指南才存在:
- *
R
建模contiguous_range
和sized_range
,并且 - * ranges::size(r) 是一个 常量表达式。
推导出的类型等价于 std::simd<ranges::range_value_t<R>, ranges::size(r)>。
[编辑] 注意
建议实现支持 `basic_simd` 的启用特化与适当的实现定义类型之间的显式转换。这些适当的类型是实现中可用的非标准向量类型。
[编辑] 示例
本节不完整 原因:无示例 |
[编辑] 参阅
(C++26) |
元素类型为 bool 的数据并行类型 (类模板) |
(C++26) |
basic_simd_mask 的便利别名模板,可以指定其宽度(别名模板) |
数值数组、数组掩码和数组切片 (类模板) |