namespace std::simd {
template<std::size_t Bytes, class Abi>
class basic_mask;
template<simd-size-type N, class T = /*see below*/>
using mask = basic_mask</*see below*/>;
}
概要
basic_maskは、basic_vecの各要素に対応する真偽値(bool)をまとめて保持するデータ並列型である。比較演算子の結果や、要素ごとの条件選択(select)などで用いられる。
basic_mask<Bytes, Abi>は、Bytesが対応する要素型のサイズ、AbiがABIタグを表す。要素数は対応するbasic_vecと一致する。通常は、対応するbasic_vecのmask_typeメンバや、要素数を指定する別名maskを通じて利用する。
Bytes: 対応する要素型のバイトサイズ。ある「vectorizable type」Tについてsizeof(T)と等しくなければならないAbi: 要素数と内部表現を決定するABIタグ型
有効な特殊化・無効な特殊化
basic_mask<Bytes, Abi>の各特殊化は、対応する有効なbasic_vecが存在するとき「有効」(enabled)となる。有効なbasic_maskはトリビアルコピー可能である。無効な特殊化は、デフォルトコンストラクタ・デストラクタ・コピーコンストラクタ・コピー代入演算子がすべてdelete定義され、メンバとしてはvalue_type・abi_typeのみを持つ。
メンバ関数
構築/代入
| 名前 | 説明 | 対応バージョン |
|---|---|---|
(constructor) |
コンストラクタ | C++26 |
(destructor) |
デストラクタ(トリビアル) | C++26 |
イテレータ
| 名前 | 説明 | 対応バージョン |
|---|---|---|
begin |
先頭要素を指すイテレータを取得する | C++26 |
end |
番兵を取得する | C++26 |
cbegin |
先頭要素を指す読み取り専用イテレータを取得する | C++26 |
cend |
番兵を取得する | C++26 |
要素アクセス
| 名前 | 説明 | 対応バージョン |
|---|---|---|
operator[] |
要素または要素の並べ替えを取得する | C++26 |
単項演算子
| 名前 | 説明 | 対応バージョン |
|---|---|---|
operator! |
論理反転 | C++26 |
operator+ |
単項プラス(basic_vecへ変換) |
C++26 |
operator- |
単項マイナス(basic_vecへ変換) |
C++26 |
operator~ |
ビット反転(basic_vecへ変換) |
C++26 |
変換
| 名前 | 説明 | 対応バージョン |
|---|---|---|
operator basic_vec |
basic_vecへの変換 |
C++26 |
to_bitset |
std::bitsetへ変換する |
C++26 |
to_ullong |
unsigned long longへ変換する |
C++26 |
静的メンバ変数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
size |
要素数を表すstd::integral_constant |
C++26 |
メンバ型
| 名前 | 説明 | 対応バージョン |
|---|---|---|
value_type |
bool |
C++26 |
abi_type |
ABIタグ型Abi |
C++26 |
iterator |
イテレータ型(説明専用) | C++26 |
const_iterator |
読み取り専用イテレータ型(説明専用) | C++26 |
非メンバ(Hidden friends)関数
二項論理・ビット演算子
| 名前 | 説明 | 対応バージョン |
|---|---|---|
operator&& |
論理積 | C++26 |
operator|| |
論理和 | C++26 |
operator& |
ビット論理積 | C++26 |
operator| |
ビット論理和 | C++26 |
operator^ |
ビット排他的論理和 | C++26 |
複合代入演算子
| 名前 | 説明 | 対応バージョン |
|---|---|---|
operator&= |
ビット論理積の複合代入 | C++26 |
operator|= |
ビット論理和の複合代入 | C++26 |
operator^= |
ビット排他的論理和の複合代入 | C++26 |
比較演算子
| 名前 | 説明 | 対応バージョン |
|---|---|---|
operator== |
等値比較 | C++26 |
operator!= |
非等値比較 | C++26 |
operator>= |
以上を判定する | C++26 |
operator<= |
以下を判定する | C++26 |
operator> |
より大きいかを判定する | C++26 |
operator< |
より小さいかを判定する | C++26 |
例
#include <simd>
#include <print>
namespace simd = std::simd;
int main()
{
simd::vec<int, 4> a([](int i) { return i; }); // {0, 1, 2, 3}
// 比較演算子の結果はマスクとして得られる
simd::vec<int, 4>::mask_type m = (a < 2); // {true, true, false, false}
for (int i = 0; i < m.size(); ++i) {
std::print("{} ", m[i]);
}
std::println("");
}
出力
true true false false
バージョン
言語
- C++26
処理系
- Clang: 22 ❌
- GCC: 16.1 ❌
- Visual C++: 2026 Update 2 ❌
関連項目
参照
- P1928R15 std::simd — merge data-parallel types from the Parallelism TS 2
- C++26で
std::simdライブラリが追加された
- C++26で
- P3691R1 Reconsider naming of the namespace for "std::simd"
- マスク型を
basic_mask/maskに改名した
- マスク型を
- P3922R1 Missing deduction guide from
simd::masktosimd::vecbasic_maskからbasic_vecへの推論補助が追加された