std::experimental::split, split_by

From cppreference.com
< cpp‎ | experimental‎ | simd
 
 
Technical specifications
Filesystem library (filesystem TS)
Library fundamentals (library fundamentals TS)
Library fundamentals 2 (library fundamentals TS v2)
Library fundamentals 3 (library fundamentals TS v3)
Extensions for parallelism (parallelism TS)
Extensions for parallelism 2 (parallelism TS v2)
Extensions for concurrency (concurrency TS)
Extensions for concurrency 2 (concurrency TS v2)
Concepts (concepts TS)
Ranges (ranges TS)
Reflection (reflection TS)
Mathematical special functions (special functions TR)
 
 
 
Defined in header <experimental/simd>
template< std::size_t... Sizes, class T, class Abi >

std::tuple<simd<T, simd_abi::deduce_t<T, Sizes>>...>

split( const simd<T, Abi>& v ) noexcept;
(1) (parallelism TS v2)
template< std::size_t... Sizes, class T, class Abi >

std::tuple<simd_mask<T, simd_abi::deduce_t<T, Sizes>>...>

split( const simd_mask<T, Abi>& v ) noexcept;
(2) (parallelism TS v2)
template< class V, class Abi >

std::array<V, simd_size_v<typename V::value_type, Abi> / V::size()>

split( const simd<typename V::value_type, Abi>& v ) noexcept;
(3) (parallelism TS v2)
template< class V, class Abi >

std::array<V, simd_size_v<typename V::value_type, Abi> / V::size()>

split( const simd_mask<typename V::value_type, Abi>& v ) noexcept;
(4) (parallelism TS v2)
template< size_t N, class T, class A >

array<resize_simd<simd_size_v<T, A> / N, simd<T, A>>, N>

split_by( const simd<T, A>& v ) noexcept;
(5) (parallelism TS v2)
template< size_t N, class T, class A >

array<resize_simd<simd_size_v<T, A> / N, simd_mask<T, A>>, N>

split_by( const simd_mask<T, A>& v ) noexcept;
(6) (parallelism TS v2)

Splits the input simd or simd_mask object into multiple simd or simd_mask objects.

1-2) Split the input object into potentially different types (e.g. types with different sizes) of objects. These functions do not participate in overloading resolution unless Sizes... sum up to v.size().
3-4) Split the input object into an array of objects. These functions do not participate in overloading resolution unless
  • The array element must be of type simd or simd_mask, for the type of v as simd or simd_mask, respectively.
  • simd_size_v<typename V::value_type, Abi> is an integral multiple of V::size().
5-6) Split the input object into an array of objects. These functions shall not participate in overload resolution unless simd_size_v<T, A> is an integral multiple of N.

Parameters

v - the input simd or simd_mask object

Return value

1-2) A tuple that contains the splitted simd or simd_mask objects.
3-6) An array that contains the splitted simd or simd_mask objects.

Example