GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::experimental::rebind_simd,std::experimental::resize_simd(3) C++ Standard Libary std::experimental::rebind_simd,std::experimental::resize_simd(3)

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


Defined in header <experimental/simd>
template< class T, class V > (1) (parallelism TS v2)
struct rebind_simd;
template< int N, class V > (2) (parallelism TS v2)
struct resize_simd;


Creates a simd or simd_mask type with a different element type or size. The new type
likely uses an ABI tag type different from V::abi_type.


1) Changes the element type to T and keeps the size unchanged.
2) Changes the size to N and keeps the element type unchanged.


T - the new element type; an arithmetic type other than bool
N - the new number of elements
V - a simd or simd_mask type


Name Definition
type simd or simd_mask type with a different element type (1) or size (2)


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

// Run this code


#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';
}


deduce obtains an ABI type for given element type and number of
deduce_t elements
(parallelism TS v2) (class template)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.