命名空间
变体
操作

std::basic_simd, std::simd

来自 cppreference.cn
< 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::basic_simd 特化是数据并行类型。默认 ABI 标签由实现于编译时确定。
2) std::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 std::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... ) -> /* see below */;
(自 C++26 起)

仅当满足以下条件时,才存在推导指引:

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

[编辑] 注释

建议实现支持在 basic_simd 的启用特化与适当的实现定义的类型之间进行显式转换。这些适当的类型是在实现中可用的非标准向量类型。

[编辑] 示例

[编辑] 参见

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