名前空間
変種
操作

std::experimental::simd_cast, std::experimental::static_simd_cast

From cppreference.com
< cpp‎ | experimental‎ | simd
 
 
 
 
 
ヘッダー <experimental/simd> で定義
template< class V, class T, class Abi >
/*下記参照*/ simd_cast( const simd<T, Abi>& v ) noexcept;
(1) (parallelism TS v2)
template< class V, class T, class Abi >
/*下記参照*/ static_simd_cast( const simd<T, Abi>& v ) noexcept;
(2) (parallelism TS v2)

simdオブジェクトを別のsimdオブジェクトにキャストします。VがTの場合、simd<T, Abi>を返します。それ以外の場合で、Vがスカラー型の場合、simd<V, simd_abi::fixed_size<simd<T, Abi>::size()>>を返します。それ以外の場合、Vはsimd型でなければならず、関数はVを返します。

1) この関数は、以下の条件が満たされない限り、オーバーロード解決に参加しません。
  • 入力要素の可能なすべての値が出力要素で表現できること。
  • またはis_simd_v<V>がfalseであること、またはV::size()simd<T, Abi>::size()であること。
2) この関数は、is_simd_v<V>がfalseであるか、またはV::size()simd<T, Abi>::size()であるかのいずれかでない限り、オーバーロード解決に参加しません。

目次

[編集] Parameters

v - 入力simdオブジェクト

[編集] Return value

i番目の要素がstatic_cast<To>(v[i])に初期化されたsimdオブジェクト。ここで、Toは指定された出力要素型です。

[編集] Notes

TS仕様には、simd_mask用のsimd_castおよびstatic_simd_castオーバーロードがありません。libstdc++の実装では、std::experimental::__proposed名前空間に不足しているオーバーロードが提供されています。すでにショートカットを使用している場合は、

namespace stdx = std::experimental;

それを使用することに興味があるかもしれません。

namespace stdx {
  using namespace std::experimental;
  using namespace std::experimental::__proposed;
}

または、libstdc++はsimd_mask__cvt()メンバ関数を実装しており、これによりマスクの暗黙的な変換が可能になります。関連項目: https://github.com/VcDevel/std-simd/issues/41

[編集] Example

English 日本語 中文(简体) 中文(繁體)