Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::experimental::rebind_simd,std::experimental::resize_simd

      From cppreference.com
      <cpp‎ |experimental‎ |simd
       
       
       
       
       
      Defined in header<experimental/simd>
      template<class T,class V>
      struct rebind_simd;
      (1)(parallelism TS v2)
      template<int N,class V>
      struct resize_simd;
      (2)(parallelism TS v2)

      Creates asimd orsimd_mask type with a different element type or size. The new type likely uses an ABI tag type different fromV::abi_type.

      1) Changes the element type toT and keeps the size unchanged.
      2) Changes the size toN and keeps the element type unchanged.

      Contents

      [edit]Template parameters

      T - the new element type; an arithmetic type other thanbool
      N - the new number of elements
      V - asimd orsimd_mask type

      [edit]Member types

      Name Definition
      typesimd orsimd_mask type with a different element type(1) or size(2)

      [edit]Helper types

      template<class T,class V>
      using rebind_simd_t=typename rebind_simd<T, V>::type;
      (parallelism TS v2)
      template<int N,class V>
      using resize_simd_t=typename resize_simd<N, V>::type;
      (parallelism TS v2)

      [edit]Example

      Run this code
      #include <experimental/simd>#include <iostream> namespace stdx= std::experimental;using floatv= stdx::native_simd<float>; // use double precision internallyfloatv dp(floatv x){using doublev= stdx::rebind_simd_t<double, floatv>;return stdx::static_simd_cast<floatv>(stdx::simd_cast<doublev>(x)-1.234);} template<class T>stdx::resize_simd_t<T::size()/2, T> partial_reduction(T x){auto[lo, hi]= stdx::split<stdx::resize_simd_t<T::size()/2, T>>(x);return lo+ hi;} int main(){    floatv x([](auto i){return1.234f+std::numeric_limits<float>::epsilon()* i;});    x= dp(x);constauto y= partial_reduction(x);for(unsigned i=0; i< y.size();++i)std::cout<< y[i]<<' ';std::cout<<'\n';}

      Possible output:

      1.73569e-07 4.11987e-07

      [edit]See also

      (parallelism TS v2)
      obtains an ABI type for given element type and number of elements
      (class template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/experimental/simd/rebind_simd&oldid=159774"

      [8]ページ先頭

      ©2009-2025 Movatter.jp