Low-Level Abstraction of Memory Access
Simd.hpp File Reference
#include "Core.hpp"
#include "RecordRef.hpp"
#include "macros.hpp"
#include "mapping/AoS.hpp"
#include "mapping/AoSoA.hpp"
#include "mapping/SoA.hpp"
#include <type_traits>
+ Include dependency graph for Simd.hpp:

Go to the source code of this file.

Classes

struct  llama::SimdTraits< Simd, SFINAE >
 
struct  llama::SimdTraits< T, std::enable_if_t< std::is_arithmetic_v< T > > >
 
struct  llama::internal::BindMakeSizedSimd< N, MakeSizedSimd >
 
struct  llama::internal::SimdizeNImpl< RecordDim, N, MakeSizedSimd >
 
struct  llama::internal::SimdizeNImpl< RecordDim, 1, MakeSizedSimd >
 
struct  llama::internal::SizeEqualTo< S >
 

Namespaces

 llama
 
 llama::internal
 

Typedefs

template<typename RecordDim , std::size_t N, template< typename, auto > typename MakeSizedSimd>
using llama::SimdizeN = typename internal::SimdizeNImpl< RecordDim, N, MakeSizedSimd >::type
 
template<typename RecordDim , template< typename > typename MakeSimd>
using llama::Simdize = TransformLeaves< RecordDim, MakeSimd >
 
template<typename T , std::size_t N, template< typename, auto > typename MakeSizedSimd>
using llama::SimdN = typename std::conditional_t< isRecordDim< T >, std::conditional_t< N==1, mp_identity< One< T > >, mp_identity< One< SimdizeN< T, N, MakeSizedSimd > >> >, std::conditional_t< N==1, mp_identity< T >, mp_identity< SimdizeN< T, N, MakeSizedSimd > >> >::type
 
template<typename T , template< typename > typename MakeSimd>
using llama::Simd = typename std::conditional_t< isRecordDim< T >, mp_identity< One< Simdize< T, MakeSimd > >>, mp_identity< Simdize< T, MakeSimd > >>::type
 

Functions

template<typename RecordDim , template< typename > typename MakeSimd, typename BinaryReductionFunction >
constexpr auto llama::chooseSimdLanes (BinaryReductionFunction reduce) -> std::size_t
 
template<typename T , typename Simd , typename SrcRC , typename DstRC >
void llama::internal::loadSimdFromField (const T &srcRef, Simd &dstSimd, SrcRC srcRC, DstRC dstRC)
 
template<typename Simd , typename TFwd , typename SrcRC , typename DstRC >
void llama::internal::storeSimdToField (const Simd &srcSimd, TFwd &&dstRef, SrcRC srcRC, DstRC dstRC)
 
template<typename T , typename Simd >
void llama::loadSimd (const T &srcRef, Simd &dstSimd)
 
template<typename Simd , typename TFwd >
void llama::storeSimd (const Simd &srcSimd, TFwd &&dstRef)
 
template<std::size_t N, template< typename, auto > typename MakeSizedSimd, typename View , typename UnarySimdFunction >
void llama::simdForEachN (View &view, UnarySimdFunction f)
 
template<template< typename > typename MakeSimd, template< typename, auto > typename MakeSizedSimd, typename View , typename UnarySimdFunction >
void llama::simdForEach (View &view, UnarySimdFunction f)
 

Variables

template<typename Simd , typename SFINAE = void>
constexpr auto llama::simdLanes = SimdTraits<Simd>::lanes
 
template<typename RecordDim , template< typename > typename MakeSimd>
constexpr std::size_t llama::simdLanesWithFullVectorsFor
 
template<typename RecordDim , template< typename > typename MakeSimd>
constexpr std::size_t llama::simdLanesWithLeastRegistersFor
 
template<typename AoSMapping , typename ElementType , std::size_t Lanes>
constexpr auto llama::internal::aosStridedIndices