一呼百應, "one call, a hundred responses"
Loading...
Searching...
No Matches
simd_data.hpp File Reference
#include <cstdint>
#include <type_traits>
#include <immintrin.h>
#include "attributes/common.hpp"
#include "numerics.hpp"
#include "types.hpp"
Include dependency graph for simd_data.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  ein::detail::storage_type_impl< T >
 
struct  ein::detail::storage_type_impl< bf16 >
 
struct  ein::detail::storage_type_impl< fp16 >
 
struct  ein::detail::has_lifted_operations_impl< T >
 
struct  ein::detail::has_lifted_operations_impl< bf16 >
 
struct  ein::detail::has_lifted_operations_impl< fp16 >
 
struct  ein::detail::si< N >
 
struct  ein::detail::ps< N >
 
struct  ein::detail::pd< N >
 
struct  ein::detail::si< 128 >
 
struct  ein::detail::ps< 128 >
 
struct  ein::detail::pd< 128 >
 
struct  ein::detail::si< 256 >
 
struct  ein::detail::ps< 256 >
 
struct  ein::detail::pd< 256 >
 
struct  ein::detail::si< 512 >
 
struct  ein::detail::ps< 512 >
 
struct  ein::detail::pd< 512 >
 
struct  ein::detail::simd_intrinsic< T, N >
 
struct  ein::detail::simd_intrinsic< float, N >
 
struct  ein::detail::simd_intrinsic< double, N >
 
struct  ein::detail::simd_intrinsic< T, N >
 

Namespaces

namespace  ein
 
namespace  ein::detail
 

Concepts

concept  ein::has_storage_type
 
concept  ein::has_lifted_operations
 Does this type have operations that semantically correct when lifted to the simd_data_t level?
 
concept  ein::has_simd_type
 ein::simd_data_t<T,N> is defined
 
concept  ein::has_builtin_convertvector
 can we convert simd_data_t<U,N> -> simd_data_t<T,N> automatically using gcc vector extensions?
 
concept  ein::simd_builtin
 is this type one of the types that is handed well automatically by clang/gcc vector extensions?
 
concept  ein::has_mmask
 Do we want to use AVX512's notion of an _mmask8, _mmask16, _mmask32, or _mmask64 for masking operations.
 

Typedefs

template<typename T >
using ein::storage_type
 The type used to store T in a simd_data_t.
 
template<typename T , size_t N>
using ein::simd_data_t = storage_type<T> __attribute__((__vector_size__(N*sizeof(storage_type<T>)),__aligned__(N*sizeof(storage_type<T>))))
 
template<typename T , size_t N>
using ein::simd_intrinsic_t
 Returns the Intel intrinsic type associated with a simd register full of N values of type T.
 
template<size_t N>
using ein::mmask_t
 If AVX512 is enabled returns the type of an n-bit mmask.
 
template<typename T , size_t N>
using ein::simd_mask_t
 What type of mask should I use?
 

Functions

__m128 ein::cast_ps (__m128i a) noexcept
 
__m128 ein::cast_ps (__m128 a) noexcept
 
__m256 ein::cast_ps (__m256i a) noexcept
 
__m256 ein::cast_ps (__m256 a) noexcept
 
__m128d ein::cast_pd (__m128i a) noexcept
 
__m128d ein::cast_pd (__m128d a) noexcept
 
__m256d ein::cast_pd (__m256i a) noexcept
 
__m256d ein::cast_pd (__m256d a) noexcept
 
__m128i ein::cast_si (__m128 a) noexcept
 
__m128i ein::cast_si (__m128d a) noexcept
 
__m128i ein::cast_si (__m128i a) noexcept
 
__m256i ein::cast_si (__m256 a) noexcept
 
__m256i ein::cast_si (__m256d a) noexcept
 
__m256i ein::cast_si (__m256i a) noexcept
 
__m512 ein::cast_ps (__m512i a) noexcept
 
__m512d ein::cast_pd (__m512i a) noexcept
 
__m512 ein::cast_ps (__m512 a) noexcept
 
__m512d ein::cast_pd (__m512d a) noexcept
 
__m512i ein::cast_si (__m512 a) noexcept
 
__m512i ein::cast_si (__m512d a) noexcept
 
__m512i ein::cast_si (__m512i a) noexcept
 

Variables

constexpr size_t ein::max_simd_size = 64
 largest simd register width supported on this platform in bytes
 

Detailed Description

SPDX-FileType: Source
SPDX-FileCopyrightText: 2024 Edward Kmett <ekmett@gmail.com>
SPDX-License-Identifier: BSD-2-Clause OR Apache-2.0

Definition in file simd_data.hpp.


Class Documentation

◆ ein::detail::si

struct ein::detail::si
template<size_t N>
struct ein::detail::si< N >

Definition at line 116 of file simd_data.hpp.

◆ ein::detail::ps

struct ein::detail::ps
template<size_t N>
struct ein::detail::ps< N >

Definition at line 117 of file simd_data.hpp.

◆ ein::detail::pd

struct ein::detail::pd
template<size_t N>
struct ein::detail::pd< N >

Definition at line 118 of file simd_data.hpp.

◆ ein::detail::simd_intrinsic

struct ein::detail::simd_intrinsic
template<typename T, size_t N>
struct ein::detail::simd_intrinsic< T, N >

Definition at line 141 of file simd_data.hpp.