IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
Classes | Enumerations | Functions
ipsdk::simd Namespace Reference

Namespace agregating IPSDK SIMD routines and classes. More...

Classes

struct  AllBits
 
struct  AllBits< ipInt16 >
 
struct  AllBits< ipInt32 >
 
struct  AllBits< ipInt64 >
 
struct  AllBits< ipInt8 >
 
struct  AllBits< ipReal32 >
 
struct  AllBits< ipReal64 >
 
struct  AllBits< ipUInt16 >
 
struct  AllBits< ipUInt32 >
 
struct  AllBits< ipUInt64 >
 
struct  AllBits< ipUInt8 >
 
struct  Avx512Step
 
struct  AvxStep
 
struct  BaseMaskPack
 structure containing set of masks for vectorized operations More...
 
struct  BaseMaskPack< ePackType::ePT_Avx, T >
 
struct  BaseMaskPack< ePackType::ePT_Avx512, T >
 
struct  BaseMaskPack< ePackType::ePT_Sse, T >
 
struct  BaseMaskPack< ipsdk::simd::ePackType::ePT_Scalar, T >
 
struct  BasePack
 structure containing intrinsic registers used to store vectorized data More...
 
struct  BasePack< ePackType::ePT_Avx, T >
 
struct  BasePack< ePackType::ePT_Avx512, T >
 
struct  BasePack< ePackType::ePT_Sse, T >
 
struct  BasePack< ipsdk::simd::ePackType::ePT_Scalar, T >
 
struct  BaseReg
 structure containing intrinsic registers used to store vectorized data More...
 
struct  BaseReg< ePackType::ePT_Avx, T >
 
struct  BaseReg< ePackType::ePT_Avx512, T >
 
struct  BaseReg< ePackType::ePT_Sse, T >
 
struct  BaseReg< ipsdk::simd::ePackType::ePT_Scalar, T >
 
struct  IS2MaskPack
 
struct  IS2MaskPack< eInstructionSet::eIS_Avx, T >
 
struct  IS2MaskPack< eInstructionSet::eIS_Avx2, T >
 
struct  IS2MaskPack< eInstructionSet::eIS_Avx512, T >
 
struct  IS2MaskPack< eInstructionSet::eIS_Fma3, T >
 
struct  IS2MaskPack< eInstructionSet::eIS_Sse2, T >
 
struct  IS2MaskPack< eInstructionSet::eIS_Standard, T >
 
struct  IS2Pack
 
struct  IS2Pack< eInstructionSet::eIS_Avx, T >
 
struct  IS2Pack< eInstructionSet::eIS_Avx2, T >
 
struct  IS2Pack< eInstructionSet::eIS_Avx512, T >
 
struct  IS2Pack< eInstructionSet::eIS_Fma3, T >
 
struct  IS2Pack< eInstructionSet::eIS_Sse2, T >
 
struct  IS2Pack< eInstructionSet::eIS_Standard, T >
 
struct  IS2PackType
 
struct  MakeUnsignedPack
 
struct  MaskPack
 
struct  MaskPack< eInstructionSet::eIS_Avx, T, typename boost::enable_if_c<!boost::is_integral< T >::value >::type >
 
struct  MaskPack< eInstructionSet::eIS_Avx2, T >
 
struct  MaskPack< eInstructionSet::eIS_Avx512, T >
 
struct  MaskPack< eInstructionSet::eIS_Fma3, T, typename boost::enable_if_c<!boost::is_integral< T >::value >::type >
 
struct  MaskPack< eInstructionSet::eIS_Sse2, T >
 
struct  MaskPack< eInstructionSet::eIS_Standard, T >
 
struct  NbEltsPerOp
 
struct  NbEltsPerOp< eInstructionSet::eIS_Avx >
 
struct  NbEltsPerOp< eInstructionSet::eIS_Avx2 >
 
struct  NbEltsPerOp< eInstructionSet::eIS_Avx512 >
 
struct  NbEltsPerOp< eInstructionSet::eIS_Fma3 >
 
struct  NbEltsPerOp< eInstructionSet::eIS_Sse2 >
 
struct  NbEltsPerOp< eInstructionSet::eIS_Sse3 >
 
struct  NbEltsPerOp< eInstructionSet::eIS_Sse41 >
 
struct  NbEltsPerOp< eInstructionSet::eIS_Sse42 >
 
struct  NbEltsPerOp< eInstructionSet::eIS_Standard >
 
struct  NbEltsPerPack
 structure giving the number of elements processed per instruction for the current pack type More...
 
struct  NbEltsPerPack< ePackType::ePT_Avx >
 specialization of NbEltsPerPack structure for packs of type "Avx" More...
 
struct  NbEltsPerPack< ePackType::ePT_Avx512 >
 specialization of NbEltsPerPack structure for packs of type "Avx512" More...
 
struct  NbEltsPerPack< ePackType::ePT_Scalar >
 specialization of NbEltsPerPack structure for packs of type "Scalar" More...
 
struct  NbEltsPerPack< ePackType::ePT_Sse >
 specialization of NbEltsPerPack structure for packs of type "Sse" More...
 
struct  NbEltsPerReg
 
struct  NbEltsPerReg< ePackType::ePT_Avx, T >
 
struct  NbEltsPerReg< ePackType::ePT_Avx512, T >
 
struct  NbEltsPerReg< ePackType::ePT_Scalar, T >
 
struct  NbEltsPerReg< ePackType::ePT_Sse, T >
 
struct  NbRegsPerOp
 structure, whose attribute value defines the number of registers contained in pack for current instruction set More...
 
struct  NbRegsPerOp< ipsdk::simd::ePackType::ePT_Scalar, T >
 specialization of NbRegsPerOp structure for packs of type "Scalar" More...
 
class  NormalRandom
 
struct  Pack
 
struct  Pack2MaskPackType
 
struct  Pack2MaskPackType< BasePack< ePackType::ePT_Scalar, ipInt8 > >
 
struct  Pack< eInstructionSet::eIS_Avx, T, typename boost::enable_if_c<!boost::is_integral< T >::value >::type >
 
struct  Pack< eInstructionSet::eIS_Avx2, T >
 
struct  Pack< eInstructionSet::eIS_Avx512, T >
 
struct  Pack< eInstructionSet::eIS_Fma3, T, typename boost::enable_if_c<!boost::is_integral< T >::value >::type >
 
struct  Pack< eInstructionSet::eIS_Sse2, T >
 
struct  Pack< eInstructionSet::eIS_Standard, T >
 
struct  RegMaskType
 
struct  RegMaskType< eInstructionSet::eIS_Standard, T >
 
struct  RegType
 
struct  RegType< eInstructionSet::eIS_Standard, T >
 
struct  SseStep
 
class  UniformRandomLCG
 

Enumerations

enum  ePackType {
  ePT_None, ePT_Scalar, ePT_Sse, ePT_Avx,
  ePT_Avx512
}
 Enumerate describing a pack type. More...
 

Functions

template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT abs (const PackT &in)
 returns the absolute value of a pack More...
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void abs (const PackT &in, PackT &out)
 affects to out the absolute value of in More...
 
template<eInstructionSet::domain IS, class PackT >
IPSDK_FORCEINLINE PackT acos (const PackT &in)
 
template<eInstructionSet::domain IS, class PackT >
IPSDK_FORCEINLINE void acos (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT add (const PackT &in1, const PackT &in2)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void add (const PackT &in1, const PackT &in2, PackT &out)
 
template<eInstructionSet::domain IS, class PackT >
IPSDK_FORCEINLINE PackT asin (const PackT &in)
 
template<eInstructionSet::domain IS, class PackT >
IPSDK_FORCEINLINE void asin (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT atan (const PackT &x)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void atan (const PackT &x, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT atan2 (const PackT &y, const PackT &x)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void atan2 (const PackT &y, const PackT &x, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT ceil (const PackT &in)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void ceil (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, ePackType::domain packType, typename T >
IPSDK_FORCEINLINE BasePack< packType, T > conditionalAdd (const BaseMaskPack< packType, T > &mask, const BasePack< packType, T > &in1, const BasePack< packType, T > &in1)
 
template<eInstructionSet::domain instructionSet, ePackType::domain packType, typename T >
IPSDK_FORCEINLINE void conditionalAdd (const BaseMaskPack< packType, T > &mask, const BasePack< packType, T > &in1, const BasePack< packType, T > &in2, BasePack< packType, T > &out)
 
template<eInstructionSet::domain instructionSet, eInstructionSet::domain instructionSetFma, class PackT >
IPSDK_FORCEINLINE PackT cos (const PackT &in)
 
template<eInstructionSet::domain instructionSet, eInstructionSet::domain instructionSetFma, class PackT >
IPSDK_FORCEINLINE void cos (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT div (const PackT &in1, const PackT &in2)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void div (const PackT &in1, const PackT &in2, PackT &out)
 
template<eInstructionSet::domain instructionSet, eInstructionSet::domain instructionSetFma, class PackT >
IPSDK_FORCEINLINE PackT exp (const PackT &in)
 
template<eInstructionSet::domain instructionSet, eInstructionSet::domain instructionSetFma, class PackT >
IPSDK_FORCEINLINE void exp (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT floor (const PackT &in)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void floor (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT fmadd (const PackT &in1, const PackT &in2, const PackT &in3)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void fmadd (const PackT &in1, const PackT &in2, const PackT &in3, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE Pack2MaskPackType< PackT >::Type isEven (const PackT &in)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void isEven (const PackT &in, typename Pack2MaskPackType< PackT >::Type &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT isFloatIntegral (const PackT &in)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void isFloatIntegral (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE Pack2MaskPackType< PackT >::Type isOdd (const PackT &in)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void isOdd (const PackT &in, typename Pack2MaskPackType< PackT >::Type &out)
 
template<eInstructionSet::domain instructionSet, eInstructionSet::domain instructionSetFma, class PackT >
IPSDK_FORCEINLINE PackT log (const PackT &in)
 
template<eInstructionSet::domain instructionSet, eInstructionSet::domain instructionSetFma, class PackT >
IPSDK_FORCEINLINE void log (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT max (const PackT &in1, const PackT &in2)
 returns the maximum of 2 packs More...
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void max (const PackT &in1, const PackT &in2, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT min (const PackT &in1, const PackT &in2)
 returns the minimum of 2 packs More...
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void min (const PackT &in1, const PackT &in2, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT modulo (const PackT &in, const PackT &m)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void modulo (const PackT &in, const PackT &m, PackT &out)
 
template<eInstructionSet::domain IS, typename T >
IPSDK_FORCEINLINE void moduloCentered (const simd::Pack< IS, T > &packVal, const simd::Pack< IS, T > &packModuloVal, simd::Pack< IS, T > &packResult)
 
template<eInstructionSet::domain IS, typename T >
IPSDK_FORCEINLINE void moduloCentered (const simd::Pack< IS, T > &packVal, const simd::Pack< IS, T > &packModuloVal, const simd::Pack< IS, T > &packHalfModuloVal, const simd::Pack< IS, T > &packMHalfModuloVal, simd::Pack< IS, T > &packResult)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT mul (const PackT &in1, const PackT &in2)
 returns the product of 2 input pack operandes More...
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void mul (const PackT &in1, const PackT &in2, PackT &out)
 
template<eInstructionSet::domain instructionSet, eInstructionSet::domain instructionSetFma, class PackT >
IPSDK_FORCEINLINE PackT pow (const PackT &in1, const PackT &in2)
 given 2 input packs in1 and in2, returns exp(in2.log(in1)) More...
 
template<eInstructionSet::domain instructionSet, eInstructionSet::domain instructionSetFma, class PackT >
IPSDK_FORCEINLINE void pow (const PackT &in1, const PackT &in2, PackT &out)
 
template<eInstructionSet::domain instructionSet, typename TOut , class PackIn >
IPSDK_FORCEINLINE ipsdk::simd::IS2Pack< instructionSet, TOut >::Type round (const PackIn &in)
 
template<eInstructionSet::domain instructionSet, class PackIn , class PackOut >
IPSDK_FORCEINLINE void round (const PackIn &in, PackOut &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT roundToEven (const PackT &in)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void roundToEven (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT roundToNearestIntegral (const PackT &in)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void roundToNearestIntegral (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, typename TOut , class PackIn >
IPSDK_FORCEINLINE ipsdk::simd::IS2Pack< instructionSet, TOut >::Type saturated_round (const PackIn &in)
 
template<eInstructionSet::domain instructionSet, class PackIn , class PackOut >
IPSDK_FORCEINLINE void saturated_round (const PackIn &in, PackOut &out)
 
template<eInstructionSet::domain instructionSet, eInstructionSet::domain instructionSetFma, class PackT >
IPSDK_FORCEINLINE PackT sin (const PackT &in)
 
template<eInstructionSet::domain instructionSet, eInstructionSet::domain instructionSetFma, class PackT >
IPSDK_FORCEINLINE void sin (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT sqrt (const PackT &in)
 returns the square root of a pack More...
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void sqrt (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT sub (const PackT &in1, const PackT &in2)
 returns the result of an arithmetic substraction on 2 input pack operandes More...
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void sub (const PackT &in1, const PackT &in2, PackT &out)
 
template<eInstructionSet::domain IS, eInstructionSet::domain ISFma, class PackT >
IPSDK_FORCEINLINE PackT tan (const PackT &in)
 
template<eInstructionSet::domain IS, eInstructionSet::domain ISFma, class PackT >
IPSDK_FORCEINLINE void tan (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT truncate (const PackT &in)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void truncate (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT unaryMinus (const PackT &in)
 returns the opposite of a pack More...
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void unaryMinus (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT assign (const typename PackT::DataType &value)
 creates and returns a pack, whose all elements equal a given value More...
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void assign (PackT &pack, const typename PackT::DataType &value)
 assigns a given value to all the elements of input pack More...
 
template<eInstructionSet::domain instructionSet, typename TOut , class PackIn >
IPSDK_FORCEINLINE ipsdk::simd::IS2Pack< instructionSet, TOut >::Type bitwiseCast (const PackIn &in)
 casts from PackIn type to PackOut type, leaving all the bits unchanged (TIn and TOut must have the same size) More...
 
template<eInstructionSet::domain instructionSet, class PackIn , class PackOut >
IPSDK_FORCEINLINE void bitwiseCast (const PackIn &in, PackOut &out)
 casts from PackIn type to PackOut type, leaving all the bits unchanged (TIn and TOut must have the same size) More...
 
template<eInstructionSet::domain IS, class PackIn , class PackOut >
IPSDK_FORCEINLINE void bool_mask_cast (const PackIn &in, PackOut &out)
 
template<eInstructionSet::domain instructionSet, typename TOut , class PackIn >
IPSDK_FORCEINLINE ipsdk::simd::IS2Pack< instructionSet, TOut >::Type cast (const PackIn &in)
 casts from PackIn type to PackOut type More...
 
template<eInstructionSet::domain instructionSet, class PackIn , class PackOut >
IPSDK_FORCEINLINE void cast (const PackIn &in, PackOut &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE Pack2MaskPackType< PackT >::Type isEqual (const PackT &in1, const PackT &in2)
 isEqual function; tests if all the elements of the first operand pack equal the elements of the second operand pack
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void isEqual (const PackT &in1, const PackT &in2, typename Pack2MaskPackType< PackT >::Type &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE Pack2MaskPackType< PackT >::Type isGreater (const PackT &in1, const PackT &in2)
 isGreater function; vectorized comparison ("is greater than" test) of data contained in 2 Register structures
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void isGreater (const PackT &in1, const PackT &in2, typename Pack2MaskPackType< PackT >::Type &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE Pack2MaskPackType< PackT >::Type isGreaterEqual (const PackT &in1, const PackT &in2)
 isGreaterEqual function; vectorized comparison ("is greater than or equal to" test) of data contained in 2 Register structures
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void isGreaterEqual (const PackT &in1, const PackT &in2, typename Pack2MaskPackType< PackT >::Type &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE ipsdk::simd::Pack2MaskPackType< PackT >::Type isLess (const PackT &in1, const PackT &in2)
 isLess function; vectorized comparison ("is less than" test) of data contained in 2 Register structures
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void isLess (const PackT &in1, const PackT &in2, typename Pack2MaskPackType< PackT >::Type &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE Pack2MaskPackType< PackT >::Type isLessEqual (const PackT &in1, const PackT &in2)
 isLessEqual function; vectorized comparison ("is less than or equal to" test) of data contained in 2 Register structures
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void isLessEqual (const PackT &in1, const PackT &in2, typename Pack2MaskPackType< PackT >::Type &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE Pack2MaskPackType< PackT >::Type isNotEqual (const PackT &in1, const PackT &in2)
 isNotEqual function; vectorized comparison (equality test) of data contained in 2 Register structures
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void isNotEqual (const PackT &in1, const PackT &in2, typename Pack2MaskPackType< PackT >::Type &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE Pack2MaskPackType< PackT >::Type & isOutOfRange (const PackT &in, const PackT &packMin, const PackT &packMax)
 isOutOfRange function; vectorized comparison ("is lower than min or " greater than" test) of data contained in 2 Register structures
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void isOutOfRange (const PackT &in, const PackT &packMin, const PackT &packMax, typename Pack2MaskPackType< PackT >::Type &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void sort (PackT &inOut1, PackT &inOut2)
 sort function
 
template<eInstructionSet::domain instructionSet, typename T >
IPSDK_FORCEINLINE void copy (T *dest, const T *src, ipUInt64 nbElts)
 copy function; copies the 'nbElts' of the source buffer to the destination buffer, using the instruction set passed as template argument More...
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void gather (const typename PackT::DataType *baseAddr, const typename IS2Pack< instructionSet, ipUInt32 >::Type &packIdx, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void gather (const typename PackT::DataType *baseAddr, const ipUInt32 *indexes, PackT &out)
 
template<eInstructionSet::domain instructionSet, typename T >
IPSDK_FORCEINLINE ipsdk::simd::IS2Pack< instructionSet, T >::Type load (const T *pT)
 load function; loads a simd pack from a buffer in memory More...
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void load (PackT &pack, const typename PackT::DataType *pT)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT bitwiseAnd (const PackT &in1, const PackT &in2)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void bitwiseAnd (const PackT &in1, const PackT &in2, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT bitwiseAndNot (const PackT &in1, const PackT &in2)
 bitwiseAndNot function; TODO
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void bitwiseAndNot (const PackT &in1, const PackT &in2, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT bitwiseNot (const PackT &in)
 bitwiseNot function; vectorized "bitwise not" operator
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void bitwiseNot (const PackT &in, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT bitwiseOr (const PackT &in1, const PackT &in2)
 bitwiseOr function; in 2 Register structures
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void bitwiseOr (const PackT &in1, const PackT &in2, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT bitwiseSelect (const PackT &mask, const PackT &in1, const PackT &in2)
 bitwiseSelect function; vectorized arithmetic addition of data contained in 2 Register structures
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void bitwiseSelect (const PackT &mask, const PackT &in1, const PackT &in2, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT bitwiseXOr (const PackT &in1, const PackT &in2)
 bitwiseXOr function; vectorized arithmetic addition of data contained in 2 Register structures
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void bitwiseXOr (const PackT &in1, const PackT &in2, PackT &out)
 
template<eInstructionSet::domain instructionSet, ePackType::domain packType, typename T >
IPSDK_FORCEINLINE BasePack< packType, T > ifElse (const BaseMaskPack< packType, T > &mask, const BasePack< packType, T > &in1, const BasePack< packType, T > &in2)
 ifElse function; TODO
 
template<eInstructionSet::domain instructionSet, ePackType::domain packType, typename T >
IPSDK_FORCEINLINE void ifElse (const BaseMaskPack< packType, T > &mask, const BasePack< packType, T > &in1, const BasePack< packType, T > &in2, BasePack< packType, T > &out)
 
template<eInstructionSet::domain instructionSet, ePackType::domain packType, typename T >
IPSDK_FORCEINLINE BasePack< packType, T > ifElse0 (const BaseMaskPack< packType, T > &mask, const BasePack< packType, T > &in)
 ifElse0 function; TODO
 
template<eInstructionSet::domain instructionSet, ePackType::domain packType, typename T >
IPSDK_FORCEINLINE void ifElse0 (const BaseMaskPack< packType, T > &mask, const BasePack< packType, T > &in, BasePack< packType, T > &out)
 
template<eInstructionSet::domain instructionSet, ePackType::domain packType, typename T >
IPSDK_FORCEINLINE BasePack< packType, T > ifMaskAllOnesElseZero (const BaseMaskPack< packType, ipUInt8 > &mask)
 
template<eInstructionSet::domain instructionSet, ePackType::domain packType, typename T >
IPSDK_FORCEINLINE void ifMaskAllOnesElseZero (const BaseMaskPack< packType, T > &mask, BasePack< packType, T > &out)
 
template<eInstructionSet::domain instructionSet, class MaskPackT >
IPSDK_FORCEINLINE MaskPackT logicalAnd (const MaskPackT &in1, const MaskPackT &in2)
 
template<eInstructionSet::domain instructionSet, class MaskPackT >
IPSDK_FORCEINLINE void logicalAnd (const MaskPackT &in1, const MaskPackT &in2, MaskPackT &out)
 
template<eInstructionSet::domain instructionSet, class MaskPackT >
IPSDK_FORCEINLINE MaskPackT logicalOr (const MaskPackT &in1, const MaskPackT &in2)
 
template<eInstructionSet::domain instructionSet, class MaskPackT >
IPSDK_FORCEINLINE void logicalOr (const MaskPackT &in1, const MaskPackT &in2, MaskPackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT shiftLeft (const PackT &in, ipUInt8 nbBits)
 shiftLeft function
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void shiftLeft (const PackT &in, ipUInt8 nbBits, PackT &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT shiftRight (const PackT &in, ipUInt8 nbBits)
 shiftRight function
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void shiftRight (const PackT &in, ipUInt8 nbBits, PackT &out)
 
template<eInstructionSet::domain instructionSet, ePackType::domain packType, typename T >
IPSDK_FORCEINLINE BasePack< packType, ipUInt8toBool (const BasePack< packType, T > &in)
 toBool function; TODO
 
template<eInstructionSet::domain instructionSet, ePackType::domain packType, typename T >
IPSDK_FORCEINLINE void toBool (const BasePack< packType, T > &in, BasePack< packType, ipUInt8 > &out)
 
template<eInstructionSet::domain instructionSet, ePackType::domain packType, typename T >
IPSDK_FORCEINLINE void toBool (const BaseMaskPack< packType, T > &in, BasePack< packType, ipUInt8 > &out)
 
template<eInstructionSet::domain instructionSet, typename TOut , typename TIn , ePackType::domain packType>
IPSDK_FORCEINLINE BaseMaskPack< packType, TOut > toMask (const BasePack< packType, TIn > &in)
 toMask function; TODO
 
template<eInstructionSet::domain instructionSet, typename TOut , typename TIn , ePackType::domain packType>
IPSDK_FORCEINLINE void toMask (const BasePack< packType, TIn > &in, BaseMaskPack< packType, TOut > &out)
 
template<eInstructionSet::domain instructionSet, typename TOut , class MaskPackIn >
IPSDK_FORCEINLINE ipsdk::simd::IS2MaskPack< instructionSet, TOut >::Type maskCast (const MaskPackIn &in)
 casts from MaskPackIn type to MaskPackOut type More...
 
template<eInstructionSet::domain instructionSet, class MaskPackIn , class MaskPackOut >
IPSDK_FORCEINLINE void maskCast (const MaskPackIn &in, MaskPackOut &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT::DataType max (const PackT &in)
 returns the maximum of 2 packs More...
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT::DataType min (const PackT &in)
 returns the minimum of the elements of a pack More...
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE UpperType< typename PackT::DataType >::Type sum (const PackT &in)
 returns the sum of the elements of a pack More...
 
template<eInstructionSet::domain instructionSet, typename TOut , class PackIn >
IPSDK_FORCEINLINE ipsdk::simd::IS2Pack< instructionSet, TOut >::Type saturated_cast (const PackIn &in)
 casts from PackIn type to PackOut type More...
 
template<eInstructionSet::domain instructionSet, class PackIn , class PackOut >
IPSDK_FORCEINLINE void saturated_cast (const PackIn &in, PackOut &out)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void scatter (const PackT &in, const typename IS2Pack< instructionSet, ipUInt32 >::Type &packIdx, typename PackT::DataType *const outBaseAddr)
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void scatter (const PackT &in, const ipUInt32 *indexes, typename PackT::DataType *const outBaseAddr)
 
template<eInstructionSet::domain instructionSet, typename T >
IPSDK_FORCEINLINE void set (T *buffer, T value, ipUInt64 nbElts)
 set function; assigns a given value to the 'nbElts' elements of a buffer
 
template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void unload (const PackT &pack, typename PackT::DataType *pT)
 unload function; unloads a SIMD register into a buffer in memory
 
template<ipsdk::eInstructionSet::domain IS, typename T >
IPSDK_FORCEINLINE void complexMultiply (const simd::Pack< IS, T > &packIn1Re, const simd::Pack< IS, T > &packIn1Im, const simd::Pack< IS, T > &packIn2Re, const simd::Pack< IS, T > &packIn2Im, simd::Pack< IS, T > &packOutRe, simd::Pack< IS, T > &packOutIm)
 Complex multiplication.
 
 IPSDK_INSTRUCTIONSET_TO_PACKTYPE (eIS_Standard, ePT_Scalar)
 
 IPSDK_INSTRUCTIONSET_TO_PACKTYPE (eIS_Sse2, ePT_Sse)
 
 IPSDK_INSTRUCTIONSET_TO_PACKTYPE (eIS_Avx, ePT_Avx)
 
 IPSDK_INSTRUCTIONSET_TO_PACKTYPE (eIS_Avx2, ePT_Avx)
 
 IPSDK_INSTRUCTIONSET_TO_PACKTYPE (eIS_Fma3, ePT_Avx)
 
 IPSDK_INSTRUCTIONSET_TO_PACKTYPE (eIS_Avx512, ePT_Avx512)
 

Detailed Description

Namespace agregating IPSDK SIMD routines and classes.

Enumeration Type Documentation

◆ ePackType

Enumerate describing a pack type.

Note
This object is associated to a strong enumerate definition
See also
IPSDK_Enum
Enumerator
ePT_None 

invalid type

ePT_Scalar 

packs of scalars

ePT_Sse 

packs of sse/sse2 registers (ex.: Packs of __m128i)

ePT_Avx 

packs of avx/avx2 registers (ex.: Packs of __m256i)

ePT_Avx512 

packs of avx512 registers (ex.: Packs of __m512)

Function Documentation

◆ abs() [1/2]

template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT ipsdk::simd::abs ( const PackT &  in)

returns the absolute value of a pack

given a pack P, with P = {p1, ..., pn}, abs(P) returns R, with R ={ |p1|, ..., |pn|}

◆ abs() [2/2]

template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void ipsdk::simd::abs ( const PackT &  in,
PackT &  out 
)

affects to out the absolute value of in

given a pack in, with in = {p1, ..., pn}, resulting pack 'out ' will equal to { |p1|, ..., |pn|}

Parameters
ininput operand
outpack containing the result of the operation

◆ max() [1/2]

template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT ipsdk::simd::max ( const PackT &  in1,
const PackT &  in2 
)

returns the maximum of 2 packs

given 2 packs A and B, with A = {a1, ..., an} and B = {b1, ..., bn}, max(A, B) returns C, with C ={ max(a1, b1), ..., max(an, bn))

◆ min() [1/2]

template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT ipsdk::simd::min ( const PackT &  in1,
const PackT &  in2 
)

returns the minimum of 2 packs

given 2 packs A and B, with A = {a1, ..., an} and B = {b1, ..., bn}, min(A, B) returns C, with C ={ min(a1, b1), ..., min(an, bn))

◆ mul()

template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT ipsdk::simd::mul ( const PackT &  in1,
const PackT &  in2 
)

returns the product of 2 input pack operandes

given 2 packs A and B, with A = {a1, ..., an} and B = {b1, ..., bn}, add(A, B) returns C, with C ={ a1.b1, ..., an.bn}

◆ pow()

template<eInstructionSet::domain instructionSet, eInstructionSet::domain instructionSetFma, class PackT >
IPSDK_FORCEINLINE PackT ipsdk::simd::pow ( const PackT &  in1,
const PackT &  in2 
)

given 2 input packs in1 and in2, returns exp(in2.log(in1))

given 2 packs A and B, with A = {a1, ..., an} and B = {b1, ..., bn}, pow(A, B) returns C, with C ={ exp(b1*log(a1)), ..., exp(bn*log(an))}

◆ sqrt()

template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT ipsdk::simd::sqrt ( const PackT &  in)

returns the square root of a pack

given a pack P, with P = {p1, ..., pn}, sqrt(P) returns R, with R ={ sqrt(p1), ..., sqrt(pn)}

◆ sub()

template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT ipsdk::simd::sub ( const PackT &  in1,
const PackT &  in2 
)

returns the result of an arithmetic substraction on 2 input pack operandes

given 2 packs A and B, with A = {a1, ..., an} and B = {b1, ..., bn}, add(A, B) returns C, with C ={ a1-b1, ..., an-bn}

◆ unaryMinus()

template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT ipsdk::simd::unaryMinus ( const PackT &  in)

returns the opposite of a pack

given a pack P, with P = {p1, ..., pn}, unaryMinus(P) returns R, with R ={ -p1, ..., -pn}

◆ assign() [1/2]

template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT ipsdk::simd::assign ( const typename PackT::DataType &  value)

creates and returns a pack, whose all elements equal a given value

Parameters
valuevalue assigned to all the elements of the returned pack

◆ assign() [2/2]

template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE void ipsdk::simd::assign ( PackT &  pack,
const typename PackT::DataType &  value 
)

assigns a given value to all the elements of input pack

Parameters
packpack to which the value is assigned
valuevalue to assign

◆ bitwiseCast() [1/2]

template<eInstructionSet::domain instructionSet, typename TOut , class PackIn >
IPSDK_FORCEINLINE ipsdk::simd::IS2Pack<instructionSet, TOut>::Type ipsdk::simd::bitwiseCast ( const PackIn &  in)

casts from PackIn type to PackOut type, leaving all the bits unchanged (TIn and TOut must have the same size)

Parameters
inpack to cast
Returns
the cast pack

◆ bitwiseCast() [2/2]

template<eInstructionSet::domain instructionSet, class PackIn , class PackOut >
IPSDK_FORCEINLINE void ipsdk::simd::bitwiseCast ( const PackIn &  in,
PackOut &  out 
)

casts from PackIn type to PackOut type, leaving all the bits unchanged (TIn and TOut must have the same size)

Parameters
inpack to cast
outthe cast pack

◆ cast()

template<eInstructionSet::domain instructionSet, typename TOut , class PackIn >
IPSDK_FORCEINLINE ipsdk::simd::IS2Pack<instructionSet, TOut>::Type ipsdk::simd::cast ( const PackIn &  in)

casts from PackIn type to PackOut type

Parameters
inpack to cast
Returns
the cast pack

◆ copy()

template<eInstructionSet::domain instructionSet, typename T >
IPSDK_FORCEINLINE void ipsdk::simd::copy ( T *  dest,
const T *  src,
ipUInt64  nbElts 
)

copy function; copies the 'nbElts' of the source buffer to the destination buffer, using the instruction set passed as template argument

Parameters
destdestination buffer
srcsource buffer
nbEltsnumber of elements to copy

◆ load()

template<eInstructionSet::domain instructionSet, typename T >
IPSDK_FORCEINLINE ipsdk::simd::IS2Pack<instructionSet, T>::Type ipsdk::simd::load ( const T *  pT)

load function; loads a simd pack from a buffer in memory

Parameters
pTbuffer
Returns
the loaded pack

◆ maskCast()

template<eInstructionSet::domain instructionSet, typename TOut , class MaskPackIn >
IPSDK_FORCEINLINE ipsdk::simd::IS2MaskPack<instructionSet, TOut>::Type ipsdk::simd::maskCast ( const MaskPackIn &  in)

casts from MaskPackIn type to MaskPackOut type

Parameters
inmask pack to cast
Returns
the cast mask pack

◆ IPSDK_INSTRUCTIONSET_TO_PACKTYPE() [1/6]

ipsdk::simd::IPSDK_INSTRUCTIONSET_TO_PACKTYPE ( eIS_Standard  ,
ePT_Scalar   
)

Implementation of IS2PackType templates

◆ IPSDK_INSTRUCTIONSET_TO_PACKTYPE() [2/6]

ipsdk::simd::IPSDK_INSTRUCTIONSET_TO_PACKTYPE ( eIS_Sse2  ,
ePT_Sse   
)

Implementation of IS2PackType templates

◆ IPSDK_INSTRUCTIONSET_TO_PACKTYPE() [3/6]

ipsdk::simd::IPSDK_INSTRUCTIONSET_TO_PACKTYPE ( eIS_Avx  ,
ePT_Avx   
)

Implementation of IS2PackType templates

◆ IPSDK_INSTRUCTIONSET_TO_PACKTYPE() [4/6]

ipsdk::simd::IPSDK_INSTRUCTIONSET_TO_PACKTYPE ( eIS_Avx2  ,
ePT_Avx   
)

Implementation of IS2PackType templates

◆ IPSDK_INSTRUCTIONSET_TO_PACKTYPE() [5/6]

ipsdk::simd::IPSDK_INSTRUCTIONSET_TO_PACKTYPE ( eIS_Fma3  ,
ePT_Avx   
)

Implementation of IS2PackType templates

◆ IPSDK_INSTRUCTIONSET_TO_PACKTYPE() [6/6]

ipsdk::simd::IPSDK_INSTRUCTIONSET_TO_PACKTYPE ( eIS_Avx512  ,
ePT_Avx512   
)

Implementation of IS2PackType templates

◆ max() [2/2]

template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT::DataType ipsdk::simd::max ( const PackT &  in)

returns the maximum of 2 packs

given 2 packs A and B, with A = {a1, ..., an} and B = {b1, ..., bn}, max(A, B) returns C, with C ={ max(a1, b1), ..., max(an, bn)}

◆ min() [2/2]

template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE PackT::DataType ipsdk::simd::min ( const PackT &  in)

returns the minimum of the elements of a pack

given one pack P, with P = {p1, ..., pn} min(P) returns min(p1, ..., pn)

◆ sum()

template<eInstructionSet::domain instructionSet, class PackT >
IPSDK_FORCEINLINE UpperType<typename PackT::DataType>::Type ipsdk::simd::sum ( const PackT &  in)

returns the sum of the elements of a pack

given one pack P, with P = {p1, ..., pn} sum(P) returns p1 + ... + pn

◆ saturated_cast()

template<eInstructionSet::domain instructionSet, typename TOut , class PackIn >
IPSDK_FORCEINLINE ipsdk::simd::IS2Pack<instructionSet, TOut>::Type ipsdk::simd::saturated_cast ( const PackIn &  in)

casts from PackIn type to PackOut type

Parameters
inpack to cast
Returns
the cast pack