Skip to content

Latest commit

 

History

History
91 lines (69 loc) · 2.96 KB

File metadata and controls

91 lines (69 loc) · 2.96 KB

flags

  • simd[meta header]
  • std::simd[meta namespace]
  • class template[meta id-type]
  • cpp26[meta cpp]
namespace std::simd {
  template<class... Flags>
  struct flags {
    template<class... Other>
    friend consteval auto operator|(flags, flags<Other...>);
  };

  inline constexpr flags<> flag_default{};
  inline constexpr flags</*convert-flag*/> flag_convert{};
  inline constexpr flags</*aligned-flag*/> flag_aligned{};
  template<std::size_t N> requires (has_single_bit(N))
  constexpr flags</*overaligned-flag*/<N>> flag_overaligned{};
}

概要

flagsは、basic_vecの読み込み/書き込み(unchecked_loadunchecked_storeや、範囲を取るコンストラクタなど)の動作を制御するためのフラグをまとめて表すクラステンプレートである。整数のビットフラグのように、operator|で複数のフラグを合成できる。

通常は、以下の定義済みフラグオブジェクトを使用する。

フラグ 説明
flag_default 既定の動作(フラグなし)。要素型とメモリの型が一致し、アライメント要件を仮定しない
flag_convert メモリの要素型がbasic_vecの要素型と異なる場合に、変換読み込み/書き込みを許可する
flag_aligned メモリ先頭がbasic_vecのアライメント要件(alignment_v)を満たしていると仮定する
flag_overaligned<N> メモリ先頭がNバイト境界にアライメントされていると仮定する(Nは2の冪)

メンバ関数

非メンバ(Hidden friends)関数

名前 説明 対応バージョン
operator| 2つのflagsを合成する C++26

#include <simd>
#include <array>
#include <print>

namespace simd = std::simd;

int main()
{
  std::array<float, 4> data = {1.0f, 2.0f, 3.0f, 4.0f};

  // アライメント済みメモリからの読み込みを指定
  simd::vec<float, 4> v = simd::unchecked_load(data, simd::flag_aligned);

  std::print("{}", v[0]);
  std::println("");
}
  • simd::vec[link basic_vec.md]
  • simd::unchecked_load[link unchecked_load.md]
  • simd::flag_aligned[color ff0000]

出力

1

バージョン

言語

  • C++26

処理系

関連項目

参照