std::experimental::rebind_simd, std::experimental::resize_simd
Von cppreference.com
< cpp | experimental | simd
| Definiert in Header <experimental/simd> |
||
| template< class T, class V > struct rebind_simd; |
(1) | (Parallelismus TS v2) |
| template< int N, class V > struct resize_simd; |
(2) | (Parallelismus TS v2) |
Erstellt einen simd- oder simd_mask-Typ mit einem anderen Elementtyp oder einer anderen Größe. Der neue Typ verwendet wahrscheinlich einen anderen ABI-Tag-Typ als V::abi_type.
1) Ändert den Elementtyp zu
T und behält die Größe unverändert.2) Ändert die Größe zu
N und behält den Elementtyp unverändert.Inhalt |
[bearbeiten] Template-Parameter
| T | - | der neue Elementtyp; ein arithmetischer Typ außer bool |
| N | - | die neue Anzahl von Elementen |
| V | - | ein simd- oder simd_mask-Typ |
[bearbeiten] Member-Typen
| Name | Definition |
type
|
simd- oder simd_mask-Typ mit einem anderen Elementtyp (1) oder einer anderen Größe (2) |
[bearbeiten] Hilfstypen
| template< class T, class V > using rebind_simd_t = typename rebind_simd<T, V>::type; |
(Parallelismus TS v2) | |
| template< int N, class V > using resize_simd_t = typename resize_simd<N, V>::type; |
(Parallelismus TS v2) | |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <experimental/simd> #include <iostream> namespace stdx = std::experimental; using floatv = stdx::native_simd<float>; // use double precision internally floatv 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) { return 1.234f + std::numeric_limits<float>::epsilon() * i; }); x = dp(x); const auto y = partial_reduction(x); for (unsigned i = 0; i < y.size(); ++i) std::cout << y[i] << ' '; std::cout << '\n'; }
Mögliche Ausgabe
1.73569e-07 4.11987e-07
[bearbeiten] Siehe auch
| (Parallelismus TS v2) |
ermittelt einen ABI-Typ für den gegebenen Elementtyp und die Anzahl der Elemente (Klassen-Vorlage) |