std::experimental:: rebind_simd, std::experimental:: resize_simd
From cppreference.net
<
cpp
|
experimental
|
simd
|
Défini dans l'en-tête
<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) |
Crée un type
simd
ou
simd_mask
avec un type d'élément ou une taille différente. Le nouveau type utilise probablement un type de balise ABI différent de
V::abi_type
.
1)
Modifie le type d'élément en
T
et conserve la taille inchangée.
2)
Modifie la taille à
N
et conserve le type d'élément inchangé.
Table des matières |
Paramètres du modèle
| T | - | le nouveau type d'élément ; un type arithmétique autre que bool |
| N | - | le nouveau nombre d'éléments |
| V | - | un type simd ou simd_mask |
Types membres
| Nom | Définition |
type
|
simd
ou
simd_mask
type avec un type d'élément différent
(1)
ou taille
(2)
|
Types auxiliaires
|
template
<
class
T,
class
V
>
using rebind_simd_t = typename rebind_simd < T, V > :: type ; |
(TS parallélisme v2) | |
|
template
<
int
N,
class
V
>
using resize_simd_t = typename resize_simd < N, V > :: type ; |
(TS parallélisme v2) | |
Exemple
Exécuter ce code
#include <experimental/simd> #include <iostream> namespace stdx = std::experimental; using floatv = stdx::native_simd<float>; // utiliser la double précision en interne 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'; }
Sortie possible :
1.73569e-07 4.11987e-07
Voir aussi
|
(parallelism TS v2)
|
obtient un type ABI pour un type d'élément et un nombre d'éléments donnés
(modèle de classe) |