std::basic_simd, std::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::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 的便利別名模板,可以指定其寬度(別名模板) |
數值陣列、陣列掩碼和陣列切片 (類模板) |