命名空间
变体
操作

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` 是一个 可向量化类型,并且存在范围 `[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

[编辑] 成员常量

名称 描述
[静态]
basic_simd 的宽度
(public static 成员常量)

[编辑] 成员函数

构造一个 basic_simd 对象
(public member function) [编辑]
访问指定的元素
(public member function) [编辑]
逐元素递增和递减
(public member function) [编辑]
逐元素一元运算符
(public member function) [编辑]

[编辑] 非成员函数

逐元素二元运算符
(函数) [编辑]
逐元素复合二元运算符
(函数) [编辑]
逐元素关系运算符
(函数) [编辑]
simd_select 特化逐元素选择
(仅供说明的函数*)[编辑]

[编辑] 推导指南

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

只有当以下条件满足时,推导指南才存在:

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

[编辑] 注意

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

[编辑] 示例

[编辑] 参阅

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