CMS 3D CMS Logo

Classes | Macros | Typedefs | Functions
ExtVec.h File Reference
#include <type_traits>
#include <iosfwd>

Go to the source code of this file.

Classes

struct  As3D< V >
 
struct  ExtVecTraits< T, N >
 
struct  ExtVecTraits< double, 2 >
 
struct  ExtVecTraits< double, 4 >
 
struct  ExtVecTraits< float, 2 >
 
struct  ExtVecTraits< float, 4 >
 
struct  ExtVecTraits< long double, 2 >
 
struct  ExtVecTraits< long double, 4 >
 
struct  Rot2< T >
 
struct  Rot3< T >
 

Macros

#define VECTOR_EXT(N)   __attribute__((vector_size(N)))
 

Typedefs

typedef float __attribute__((vector_size(8))) cms_float32x2_t
 
template<typename T , int N>
using ExtVec = typename ExtVecTraits< T, N >::type
 
typedef Rot2< double > Rot2D
 
typedef Rot2< float > Rot2F
 
typedef Rot3< double > Rot3D
 
typedef Rot3< float > Rot3F
 
template<typename T >
using Vec2 = ExtVec< T, 2 >
 
typedef Vec2< double > Vec2D
 
typedef Vec2< float > Vec2F
 
typedef Vec4< double > Vec3D
 
typedef Vec4< float > Vec3F
 
template<typename T >
using Vec4 = ExtVec< T, 4 >
 
typedef Vec4< double > Vec4D
 
typedef Vec4< float > Vec4F
 

Functions

template<typename Vec , typename F >
Vec apply (Vec v, F f)
 
template<typename V >
As3D< V > as3D (V const &v)
 
template<typename W , typename V >
convert (V v)
 
template<typename V1 , typename V2 >
auto cross2 (V1 x, V2 y) -> typename std::remove_reference< decltype(x[0])>::type
 
template<typename Vec >
Vec cross3 (Vec x, Vec y)
 
template<typename V >
auto dot (V x, V y) -> typename std::remove_reference< decltype(x[0])>::type
 
template<typename V1 , typename V2 >
auto dot2 (V1 x, V2 y) -> typename std::remove_reference< decltype(x[0])>::type
 
template<typename V1 , typename V2 >
auto dot3 (V1 x, V2 y) -> typename std::remove_reference< decltype(x[0])>::type
 
template<typename T >
constexpr Rot3< Toperator* (Rot3< T > const &rh, Rot3< T > const &lh)
 
template<typename T >
constexpr Rot2< Toperator* (Rot2< T > const &rh, Rot2< T > const &lh)
 
std::ostream & operator<< (std::ostream &out, Vec2D const &v)
 
std::ostream & operator<< (std::ostream &out, Vec2F const &v)
 
std::ostream & operator<< (std::ostream &out, Vec4F const &v)
 
std::ostream & operator<< (std::ostream &out, Vec4D const &v)
 
std::ostream & operator<< (std::ostream &out, As3D< Vec4F > const &v)
 
std::ostream & operator<< (std::ostream &out, As3D< Vec4D > const &v)
 
std::ostream & operator<< (std::ostream &out, Rot3F const &v)
 
std::ostream & operator<< (std::ostream &out, Rot3D const &v)
 
std::ostream & operator<< (std::ostream &out, Rot2F const &v)
 
std::ostream & operator<< (std::ostream &out, Rot2D const &v)
 
template<typename V >
auto xy (V v) -> Vec2< typename std::remove_reference< decltype(v[0])>::type >
 
template<typename V >
auto zw (V v) -> Vec2< typename std::remove_reference< decltype(v[0])>::type >
 

Macro Definition Documentation

◆ VECTOR_EXT

#define VECTOR_EXT (   N)    __attribute__((vector_size(N)))

Definition at line 6 of file ExtVec.h.

Typedef Documentation

◆ __attribute__

__attribute__
inline

Definition at line 8 of file ExtVec.h.

◆ ExtVec

template<typename T , int N>
using ExtVec = typename ExtVecTraits<T, N>::type

Definition at line 57 of file ExtVec.h.

◆ Rot2D

typedef Rot2<double> Rot2D

Definition at line 269 of file ExtVec.h.

◆ Rot2F

typedef Rot2<float> Rot2F

Definition at line 267 of file ExtVec.h.

◆ Rot3D

typedef Rot3<double> Rot3D

Definition at line 230 of file ExtVec.h.

◆ Rot3F

typedef Rot3<float> Rot3F

Definition at line 228 of file ExtVec.h.

◆ Vec2

template<typename T >
using Vec2 = ExtVec<T, 2>

Definition at line 62 of file ExtVec.h.

◆ Vec2D

typedef Vec2<double> Vec2D

Definition at line 165 of file ExtVec.h.

◆ Vec2F

typedef Vec2<float> Vec2F

Definition at line 162 of file ExtVec.h.

◆ Vec3D

typedef Vec4<double> Vec3D

Definition at line 166 of file ExtVec.h.

◆ Vec3F

typedef Vec4<float> Vec3F

Definition at line 164 of file ExtVec.h.

◆ Vec4

template<typename T >
using Vec4 = ExtVec<T, 4>

Definition at line 60 of file ExtVec.h.

◆ Vec4D

typedef Vec4<double> Vec4D

Definition at line 167 of file ExtVec.h.

◆ Vec4F

typedef Vec4<float> Vec4F

Definition at line 163 of file ExtVec.h.

Function Documentation

◆ apply()

template<typename Vec , typename F >
Vec apply ( Vec  v,
F  f 
)
inline

◆ as3D()

template<typename V >
As3D<V> as3D ( V const &  v)
inline

Definition at line 185 of file ExtVec.h.

References findQualityFiles::v.

185  {
186  return v;
187 }

◆ convert()

template<typename W , typename V >
W convert ( v)
inline

Definition at line 66 of file ExtVec.h.

References ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), mps_fire::i, N, cms::cuda::V, findQualityFiles::v, and w().

Referenced by helper::CollectionStoreManager< OutputCollection, ClonePolicy >::cloneAndStore(), Herwig7Interface::convert(), GlobalVariablesTableProducer::VariableT< ValType, ColType, Converter >::fill(), edm::EventItemGetter< RefType, EventType >::get(), edm::ParameterSet::getParameter(), RunInfoTestESProducer::makeRunInfo(), MkFitSiStripHitConverter::produce(), CmsShowCommon::setFrom(), and FWViewEnergyScale::SetFromCmsShowCommonConfig().

66  {
67  // see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114943
68  // return __builtin_convertvector(v,W); // nope inefficient in gcc
70  constexpr int N = sizeof(V) / sizeof(T);
71  W w;
72  for (int i = 0; i != N; ++i)
73  w[i] = v[i];
74  return w;
75 }
T w() const
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t V
#define N
Definition: blowfish.cc:9
long double T

◆ cross2()

template<typename V1 , typename V2 >
auto cross2 ( V1  x,
V2  y 
) -> typename std::remove_reference<decltype(x[0])>::type
inline

Definition at line 111 of file ExtVec.h.

References x, and detailsBasic3DVector::y.

Referenced by Basic2DVector< float >::cross().

111  {
112  return x[0] * y[1] - x[1] * y[0];
113 }
float x

◆ cross3()

template<typename Vec >
Vec cross3 ( Vec  x,
Vec  y 
)
inline

Definition at line 100 of file ExtVec.h.

References x, and detailsBasic3DVector::y.

Referenced by Basic3DVector< align::Scalar >::cross().

100  {
101  // typedef Vec4<T> Vec;
102  // yz - zy, zx - xz, xy - yx, 0
103  Vec x1200{x[1], x[2], x[0], x[0]};
104  Vec y2010{y[2], y[0], y[1], y[0]};
105  Vec x2010{x[2], x[0], x[1], x[0]};
106  Vec y1200{y[1], y[2], y[0], y[0]};
107  return x1200 * y2010 - x2010 * y1200;
108 }
alpaka::Vec< TDim, Idx > Vec
Definition: config.h:24
float x

◆ dot()

template<typename V >
auto dot ( x,
y 
) -> typename std::remove_reference<decltype(x[0])>::type
inline

Definition at line 142 of file ExtVec.h.

References ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), mps_fire::i, N, runTheMatrix::ret, cms::cuda::V, x, and detailsBasic3DVector::y.

142  {
144  constexpr int N = sizeof(V) / sizeof(T);
145  T ret = 0;
146  for (int i = 0; i != N; ++i)
147  ret += x[i] * y[i];
148  return ret;
149 }
ret
prodAgent to be discontinued
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t V
#define N
Definition: blowfish.cc:9
float x
long double T

◆ dot2()

template<typename V1 , typename V2 >
auto dot2 ( V1  x,
V2  y 
) -> typename std::remove_reference<decltype(x[0])>::type
inline

Definition at line 152 of file ExtVec.h.

References x, and detailsBasic3DVector::y.

Referenced by Basic3DVector< align::Scalar >::perp2().

152  {
153  return x[0] * y[0] + x[1] * y[1];
154 }
float x

◆ dot3()

template<typename V1 , typename V2 >
auto dot3 ( V1  x,
V2  y 
) -> typename std::remove_reference<decltype(x[0])>::type
inline

Definition at line 157 of file ExtVec.h.

References x, detailsBasic3DVector::y, and detailsBasic3DVector::z.

157  {
158  auto z = x * y;
159  return z[0] + z[1] + z[2];
160 }
float float float z
float x

◆ operator*() [1/2]

template<typename T >
constexpr Rot3<T> operator* ( Rot3< T > const &  rh,
Rot3< T > const &  lh 
)
inline

Definition at line 233 of file ExtVec.h.

References mathSSE::lh.

233  {
234  return lh.rotateBack(rh);
235 }
bool int lh
Definition: SIMDVec.h:27

◆ operator*() [2/2]

template<typename T >
constexpr Rot2<T> operator* ( Rot2< T > const &  rh,
Rot2< T > const &  lh 
)
inline

Definition at line 272 of file ExtVec.h.

References mathSSE::lh.

272  {
273  return lh.rotateBack(rh);
274 }
bool int lh
Definition: SIMDVec.h:27

◆ operator<<() [1/10]

std::ostream& operator<< ( std::ostream &  out,
Vec2D const &  v 
)

Definition at line 15 of file SSEVec.cc.

15 { return out << '(' << v[0] << ", " << v[1] << ')'; }

◆ operator<<() [2/10]

std::ostream& operator<< ( std::ostream &  out,
Vec2F const &  v 
)

Definition at line 14 of file SSEVec.cc.

14 { return out << '(' << v[0] << ", " << v[1] << ')'; }

◆ operator<<() [3/10]

std::ostream& operator<< ( std::ostream &  out,
Vec4F const &  v 
)

Definition at line 8 of file SSEVec.cc.

8  {
9  return out << '(' << v[0] << ", " << v[1] << ", " << v[2] << ", " << v[3] << ')';
10 }

◆ operator<<() [4/10]

std::ostream& operator<< ( std::ostream &  out,
Vec4D const &  v 
)

◆ operator<<() [5/10]

std::ostream& operator<< ( std::ostream &  out,
As3D< Vec4F > const &  v 
)

◆ operator<<() [6/10]

std::ostream& operator<< ( std::ostream &  out,
As3D< Vec4D > const &  v 
)

◆ operator<<() [7/10]

std::ostream& operator<< ( std::ostream &  out,
Rot3F const &  v 
)

Definition at line 25 of file SSEVec.cc.

References mathSSE::as3D(), and MillePedeFileConverter_cfg::out.

25  {
26  return out << as3D(r.axis[0]) << '\n' << as3D(r.axis[1]) << '\n' << as3D(r.axis[2]);
27 }
As3D< V > as3D(V const &v)
Definition: ExtVec.h:185

◆ operator<<() [8/10]

std::ostream& operator<< ( std::ostream &  out,
Rot3D const &  v 
)

◆ operator<<() [9/10]

std::ostream& operator<< ( std::ostream &  out,
Rot2F const &  v 
)

Definition at line 33 of file SSEVec.cc.

References MillePedeFileConverter_cfg::out.

33 { return out << r.axis[0] << '\n' << r.axis[1]; }

◆ operator<<() [10/10]

std::ostream& operator<< ( std::ostream &  out,
Rot2D const &  v 
)

Definition at line 35 of file SSEVec.cc.

References MillePedeFileConverter_cfg::out.

35 { return out << r.axis[0] << '\n' << r.axis[1]; }

◆ xy()

template<typename V >
auto xy ( v) -> Vec2<typename std::remove_reference<decltype(v[0])>::type>
inline

Definition at line 78 of file ExtVec.h.

References findQualityFiles::v.

Referenced by Rot2< Scalar >::Rot2(), and Rot3< align::Scalar >::Rot3().

78  {
80  return Vec2<T>{v[0], v[1]};
81 }
ExtVec< T, 2 > Vec2
Definition: ExtVec.h:62
long double T

◆ zw()

template<typename V >
auto zw ( v) -> Vec2<typename std::remove_reference<decltype(v[0])>::type>
inline