std::datapar::basic_simd, std::datapar::simd
来自cppreference.com
在标头 <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::datapar::basic_simd
的特化是数据并行类型。默认的 ABI 标签由实现在编译时决定。2)
std::datapar::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
|
datapar::basic_simd_mask<sizeof(T), Abi> |
abi_type
|
Abi
|
[编辑] 成员常量
名称 | 说明 |
constexpr std::integral_constant< simd-size-type , simd-size-v <T, Abi>> size[静态] |
basic_simd 的宽度 (公开静态成员常量) |
[编辑] 成员函数
构造 basic_simd 对象 (公开成员函数) | |
访问指定元素 (公开成员函数) | |
逐元素增量与减量 (公开成员函数) | |
逐元素一元运算符 (公开成员函数) |
[编辑] 非成员函数
逐元素二元运算符 (函数) | |
逐元素复合二元运算符 (函数) | |
逐元素关系运算符 (函数) |
simd_select 的特化逐元素选择(仅用于阐述的函数*) |
[编辑] 推导指引
template< class R, class... Ts > basic_simd( R&& r, Ts... ) -> /* 见下文 */; |
(C++26 起) | |
仅当以下情况下提供推导指引:
-
R
实现contiguous_range
和sized_range
,且 - ranges::size(r) 是常量表达式。
推导的类型等价于 datapar::simd<ranges::range_value_t<R>, ranges::size(r)>。
[编辑] 注解
建议各实现支持 basic_simd
的被启用特化和适当的实现定义类型之间的显式转换。这些适当类型是实现中提供的非标准向量类型。
[编辑] 示例
本节未完成 原因:暂无示例 |
[编辑] 参阅
(C++26) |
元素类型为 bool 的数据并行类型 (类模板) |
(C++26) |
可以指定宽度的 basic_simd_mask 的便利别名模板 (别名模板) |
数值数组,数组掩码和数组切分 (类模板) |