std::datapar::basic_simd, std::datapar::simd

来自cppreference.com
< cpp‎ | numeric‎ | simd
 
 
 
 
 
在标头 <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可向量化类型,并且范围 [164] 中存在某个值 M 使得 Abideduce-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

[编辑] 成员常量

名称 说明
[静态]
basic_simd 的宽度
(公开静态成员常量)

[编辑] 成员函数

构造 basic_simd 对象
(公开成员函数) [编辑]
访问指定元素
(公开成员函数) [编辑]
逐元素增量与减量
(公开成员函数) [编辑]
逐元素一元运算符
(公开成员函数) [编辑]

[编辑] 非成员函数

逐元素二元运算符
(函数) [编辑]
逐元素复合二元运算符
(函数) [编辑]
逐元素关系运算符
(函数) [编辑]
simd_select 的特化逐元素选择
(仅用于阐述的函数*)[编辑]

[编辑] 推导指引

template< class R, class... Ts >
basic_simd( R&& r, Ts... ) -> /* 见下文 */;
(C++26 起)

仅当以下情况下提供推导指引:

推导的类型等价于 datapar::simd<ranges::range_value_t<R>, ranges::size(r)>

[编辑] 注解

建议各实现支持 basic_simd 的被启用特化和适当的实现定义类型之间的显式转换。这些适当类型是实现中提供的非标准向量类型。

[编辑] 示例

[编辑] 参阅

元素类型为 bool 的数据并行类型
(类模板) [编辑]
可以指定宽度的 basic_simd_mask 的便利别名模板
(别名模板) [编辑]
数值数组,数组掩码和数组切分
(类模板) [编辑]