Namespaces
Variants

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

From cppreference.net
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

#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)