ryujin 2.1.1 revision 2062b43aae59b7ee510dec4ae666e29d56c4f0be
Classes | Namespaces
simd.h File Reference
#include <compile_time_options.h>
#include <deal.II/base/tensor.h>
#include <deal.II/base/utilities.h>
#include <deal.II/base/vectorization.h>
Include dependency graph for simd.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  ryujin::get_value_type< T >
 
struct  ryujin::get_value_type< dealii::VectorizedArray< T, width > >
 

Namespaces

namespace  ryujin
 

Functions

SIMD based access to vectors and arrays of vectors
template<typename T , typename V >
DEAL_II_ALWAYS_INLINE T ryujin::load_value (const V &vector, unsigned int i)
 
template<typename T , typename T2 >
DEAL_II_ALWAYS_INLINE T ryujin::load_value (const std::vector< T2 > &vector, unsigned int i)
 
template<typename T , typename V >
DEAL_II_ALWAYS_INLINE T ryujin::load_value (const V &vector, const unsigned int *js)
 
template<typename T , typename T2 >
DEAL_II_ALWAYS_INLINE T ryujin::load_value (const std::vector< T2 > &vector, const unsigned int *js)
 
template<typename T , typename V >
DEAL_II_ALWAYS_INLINE void ryujin::store_value (V &vector, const T &values, unsigned int i)
 
template<typename T , typename T2 >
DEAL_II_ALWAYS_INLINE void ryujin::store_value (std::vector< T2 > &vector, const T &values, unsigned int i)
 
template<int rank, int dim, std::size_t width, typename Number >
DEAL_II_ALWAYS_INLINE dealii::Tensor< rank, dim, Number > ryujin::serialize_tensor (const dealii::Tensor< rank, dim, dealii::VectorizedArray< Number, width > > &vectorized, const unsigned int k)
 
template<int rank, int dim, typename Number >
DEAL_II_ALWAYS_INLINE dealii::Tensor< rank, dim, Number > ryujin::serialize_tensor (const dealii::Tensor< rank, dim, Number > &serial, const unsigned int k)
 
template<int rank, int dim, std::size_t width, typename Number >
DEAL_II_ALWAYS_INLINE void ryujin::assign_serial_tensor (dealii::Tensor< rank, dim, dealii::VectorizedArray< Number, width > > &result, const dealii::Tensor< rank, dim, Number > &serial, const unsigned int k)
 
template<int rank, int dim, typename Number >
DEAL_II_ALWAYS_INLINE void ryujin::assign_serial_tensor (dealii::Tensor< rank, dim, Number > &result, const dealii::Tensor< rank, dim, Number > &serial, const unsigned int k)
 

Transcendental and other mathematical operations

enum class  ryujin::Bias { ryujin::none , ryujin::max , ryujin::min }
 
template<typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::positive_part (const Number number)
 
template<typename Number >
DEAL_II_ALWAYS_INLINE Number ryujin::negative_part (const Number number)
 
template<int N, typename T >
ryujin::fixed_power (const T x)
 
template<typename T >
ryujin::pow (const T x, const T b)
 
template<typename T , std::size_t width>
dealii::VectorizedArray< T, width > ryujin::pow (const dealii::VectorizedArray< T, width > x, const T b)
 
template<typename T , std::size_t width>
dealii::VectorizedArray< T, width > ryujin::pow (const dealii::VectorizedArray< T, width > x, const dealii::VectorizedArray< T, width > b)
 
template<typename T >
ryujin::fast_pow (const T x, const T b, const Bias bias=Bias::none)
 
template<typename T , std::size_t width>
dealii::VectorizedArray< T, width > ryujin::fast_pow (const dealii::VectorizedArray< T, width > x, const T b, const Bias bias=Bias::none)
 
template<typename T , std::size_t width>
dealii::VectorizedArray< T, width > ryujin::fast_pow (const dealii::VectorizedArray< T, width > x, const dealii::VectorizedArray< T, width > b, const Bias bias=Bias::none)
 

Type traits and packed index handling

template<typename T >
unsigned int ryujin::get_stride_size = 1
 
template<unsigned int length, typename Functor >
DEAL_II_ALWAYS_INLINE auto ryujin::generate_iterators (Functor f) -> std::array< auto, length >
 
template<typename T >
DEAL_II_ALWAYS_INLINE void ryujin::increment_iterators (T &iterators)