Skip to content

Latest commit

 

History

History
100 lines (78 loc) · 3.48 KB

File metadata and controls

100 lines (78 loc) · 3.48 KB

reduce_max

  • simd[meta header]
  • std::simd[meta namespace]
  • function template[meta id-type]
  • cpp26[meta cpp]
namespace std::simd {
  template<class T, class Abi>
  constexpr T
    reduce_max(const basic_vec<T, Abi>& x) noexcept; // (1) C++26

  template<class T, class Abi>
  constexpr T
    reduce_max(const basic_vec<T, Abi>& x,
               const typename basic_vec<T, Abi>::mask_type& mask) noexcept; // (2) C++26

  template<class T>
  constexpr T
    reduce_max(const T& x) noexcept; // (3) C++26

  template<class T>
  constexpr T
    reduce_max(const T& x,
               std::same_as<bool> auto mask) noexcept; // (4) C++26
}
  • basic_vec[link basic_vec.md]
  • std::same_as[link /reference/concepts/same_as.md]

概要

basic_vecの要素のうち、最大の値を取得する。

  • (1) : xの全要素の最大値を返す。
  • (2) : maskで選択された要素の最大値を返す。ひとつも選択されていない場合はTの最小値を返す。
  • (3) : スカラー値xをそのまま返す(SIMD-genericなコードを書けるようにするためのオーバーロード)。
  • (4) : masktrueならxを、falseならTの最小値を返す。

テンプレートパラメータ制約

戻り値

  • (1) : すべてのi0以上x.size()未満)についてx[j] < x[i]falseとなるような要素x[j]の値を返す。
  • (2) : none_of(mask)trueならstd::numeric_limits<T>::lowest()を返す。そうでなければ、maskで選択されたすべてのインデックスiについてx[j] < x[i]falseとなるような選択要素x[j]の値を返す。
  • (3) : xを返す。
  • (4) : maskfalseならstd::numeric_limits<T>::lowest()を、そうでなければxを返す。

例外

投げない

#include <simd>
#include <print>

namespace simd = std::simd;

int main()
{
  simd::vec<int, 4> v([](int i) { return i; }); // {0, 1, 2, 3}

  // 全要素の最大値
  std::println("{}", simd::reduce_max(v));

  // 選択された要素(値が2未満)の最大値
  std::println("{}", simd::reduce_max(v, v < 2));
}
  • simd::reduce_max[color ff0000]
  • simd::vec[link basic_vec.md]

出力

3
1

バージョン

言語

  • C++26

処理系

関連項目

参照