ATLAS Offline Software
Classes | Functions | Variables
ClusterMomentsCalculator Namespace Reference

Classes

struct  ClusterMomentCalculationOptions
 
struct  CMCOptionsHolder
 
struct  RealSymmetricMatrixSolver
 
struct  RealSymmetricMatrixSolverIterative
 

Functions

CUDA_HOS_DEV void partial_kahan_babushka_neumaier_sum (const float &to_add, float &sum, float &corr)
 
template<class ... Floats, class disabler = std::enable_if_t < (std::is_same_v<std::decay_t<Floats>, float> && ...) >>
CUDA_HOS_DEV float sum_kahan_babushka_neumaier (const Floats &... fs)
 
CUDA_HOS_DEV float product_sum_cornea_harrison_tang (const float a, const float b, const float c, const float d)
 
CUDA_HOS_DEV float corrected_dot_product (const float a_1, const float a_2, const float a_3, const float b_1, const float b_2, const float b_3)
 
CUDA_HOS_DEV float corrected_dot_product (const float(&a)[3], const float(&b)[3])
 
CUDA_HOS_DEV void corrected_cross_product (float(&res)[3], const float a1, const float a2, const float a3, const float b1, const float b2, const float b3)
 
CUDA_HOS_DEV void corrected_cross_product (float(&res)[3], const float(&x)[3], const float(&y)[3])
 
CUDA_HOS_DEV float corrected_magn_cross_product (const float a1, const float a2, const float a3, const float b1, const float b2, const float b3)
 
CUDA_HOS_DEV float corrected_magn_cross_product (const float(&x)[3], const float(&y)[3])
 
void register_kernels (IGPUKernelSizeOptimizer &optimizer)
 
void calculateClusterPropertiesAndMoments (CaloRecGPU::EventDataHolder &holder, const CaloRecGPU::ConstantDataHolder &instance_data, const CMCOptionsHolder &options, const IGPUKernelSizeOptimizer &optimizer, size_t(&times)[num_time_measurements], const bool synchronize=false, CaloRecGPU::CUDA_Helpers::CUDAStreamPtrHolder stream={}, const bool defer_instead_of_oversize=false)
 

Variables

constexpr unsigned int num_time_measurements = 11
 

Function Documentation

◆ calculateClusterPropertiesAndMoments()

void ClusterMomentsCalculator::calculateClusterPropertiesAndMoments ( CaloRecGPU::EventDataHolder holder,
const CaloRecGPU::ConstantDataHolder instance_data,
const CMCOptionsHolder options,
const IGPUKernelSizeOptimizer optimizer,
size_t(&)  times[num_time_measurements],
const bool  synchronize = false,
CaloRecGPU::CUDA_Helpers::CUDAStreamPtrHolder  stream = {},
const bool  defer_instead_of_oversize = false 
)

◆ corrected_cross_product() [1/2]

CUDA_HOS_DEV void ClusterMomentsCalculator::corrected_cross_product ( float(&)  res[3],
const float  a1,
const float  a2,
const float  a3,
const float  b1,
const float  b2,
const float  b3 
)
inline

Definition at line 93 of file GPUClusterInfoAndMomentsCalculatorImpl.h.

94  {
95  res[0] = product_sum_cornea_harrison_tang(a2, b3, -a3, b2);
96  res[1] = product_sum_cornea_harrison_tang(a3, b1, -a1, b3);
97  res[2] = product_sum_cornea_harrison_tang(a1, b2, -a2, b1);
98  }

◆ corrected_cross_product() [2/2]

CUDA_HOS_DEV void ClusterMomentsCalculator::corrected_cross_product ( float(&)  res[3],
const float(&)  x[3],
const float(&)  y[3] 
)
inline

Definition at line 101 of file GPUClusterInfoAndMomentsCalculatorImpl.h.

102  {
103  corrected_cross_product(res, x[0], x[1], x[2], y[0], y[1], y[2]);
104  }

◆ corrected_dot_product() [1/2]

CUDA_HOS_DEV float ClusterMomentsCalculator::corrected_dot_product ( const float  a_1,
const float  a_2,
const float  a_3,
const float  b_1,
const float  b_2,
const float  b_3 
)
inline

Definition at line 69 of file GPUClusterInfoAndMomentsCalculatorImpl.h.

71  {
72  using namespace std;
73 
74  const float w_1 = a_1 * b_1;
75  const float w_2 = a_2 * b_2;
76  const float w_3 = a_3 * b_3;
77 
78  const float e_1 = fmaf(a_1, b_1, -w_1);
79  const float e_2 = fmaf(a_2, b_2, -w_2);
80  const float e_3 = fmaf(a_3, b_3, -w_3);
81 
82  return sum_kahan_babushka_neumaier(w_1, w_2, w_3, e_1, e_2, e_3);
83  }

◆ corrected_dot_product() [2/2]

CUDA_HOS_DEV float ClusterMomentsCalculator::corrected_dot_product ( const float(&)  a[3],
const float(&)  b[3] 
)
inline

Definition at line 86 of file GPUClusterInfoAndMomentsCalculatorImpl.h.

87  {
88  return corrected_dot_product(a[0], a[1], a[2], b[0], b[1], b[2]);
89  }

◆ corrected_magn_cross_product() [1/2]

CUDA_HOS_DEV float ClusterMomentsCalculator::corrected_magn_cross_product ( const float  a1,
const float  a2,
const float  a3,
const float  b1,
const float  b2,
const float  b3 
)
inline

Definition at line 108 of file GPUClusterInfoAndMomentsCalculatorImpl.h.

109  {
110  using namespace std;
111 
112  const float r_1 = product_sum_cornea_harrison_tang(a2, b3, -a3, b2);
113  const float r_2 = product_sum_cornea_harrison_tang(a3, b1, -a1, b3);
114  const float r_3 = product_sum_cornea_harrison_tang(a1, b2, -a2, b1);
115 
116 #ifdef __CUDA_ARCH__
117  return norm3df(r_1, r_2, r_3);
118 #else
119  return hypot(r_1, r_2, r_3);
120 #endif
121 
122  }

◆ corrected_magn_cross_product() [2/2]

CUDA_HOS_DEV float ClusterMomentsCalculator::corrected_magn_cross_product ( const float(&)  x[3],
const float(&)  y[3] 
)
inline

Definition at line 125 of file GPUClusterInfoAndMomentsCalculatorImpl.h.

126  {
127  return corrected_magn_cross_product(x[0], x[1], x[2], y[0], y[1], y[2]);
128  }

◆ partial_kahan_babushka_neumaier_sum()

CUDA_HOS_DEV void ClusterMomentsCalculator::partial_kahan_babushka_neumaier_sum ( const float &  to_add,
float &  sum,
float &  corr 
)
inline

Definition at line 21 of file GPUClusterInfoAndMomentsCalculatorImpl.h.

22  {
23  const float t = sum + to_add;
24 
25  const bool test = fabsf(sum) >= fabsf(to_add);
26 
27  const float opt_1 = (sum - t) + to_add;
28  const float opt_2 = (to_add - t) + sum;
29 
30  corr += (test) * opt_1 + (!test) * opt_2;
31 
32  sum = t;
33  }

◆ product_sum_cornea_harrison_tang()

CUDA_HOS_DEV float ClusterMomentsCalculator::product_sum_cornea_harrison_tang ( const float  a,
const float  b,
const float  c,
const float  d 
)
inline

Definition at line 54 of file GPUClusterInfoAndMomentsCalculatorImpl.h.

55  {
56  using namespace std;
57 
58  const float w_1 = a * b;
59  const float w_2 = c * d;
60 
61  const float e_1 = fmaf(a, b, -w_1);
62  const float e_2 = fmaf(c, d, -w_2);
63 
64  return sum_kahan_babushka_neumaier(w_1, w_2, e_1, e_2);
65  }

◆ register_kernels()

void ClusterMomentsCalculator::register_kernels ( IGPUKernelSizeOptimizer optimizer)

◆ sum_kahan_babushka_neumaier()

template<class ... Floats, class disabler = std::enable_if_t < (std::is_same_v<std::decay_t<Floats>, float> && ...) >>
CUDA_HOS_DEV float ClusterMomentsCalculator::sum_kahan_babushka_neumaier ( const Floats &...  fs)

Definition at line 40 of file GPUClusterInfoAndMomentsCalculatorImpl.h.

41  {
42  float ret = 0.f;
43  float corr = 0.f;
44 
45  (partial_kahan_babushka_neumaier_sum(fs, ret, corr), ...);
46 
47  return ret + corr;
48  }

Variable Documentation

◆ num_time_measurements

constexpr unsigned int ClusterMomentsCalculator::num_time_measurements = 11
constexpr

Definition at line 801 of file GPUClusterInfoAndMomentsCalculatorImpl.h.

hist_file_dump.d
d
Definition: hist_file_dump.py:142
TrigInDetValidation_Base.test
test
Definition: TrigInDetValidation_Base.py:142
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
x
#define x
convertTimingResiduals.sum
sum
Definition: convertTimingResiduals.py:55
ClusterMomentsCalculator::product_sum_cornea_harrison_tang
CUDA_HOS_DEV float product_sum_cornea_harrison_tang(const float a, const float b, const float c, const float d)
Definition: GPUClusterInfoAndMomentsCalculatorImpl.h:54
ClusterMomentsCalculator::corrected_magn_cross_product
CUDA_HOS_DEV float corrected_magn_cross_product(const float(&x)[3], const float(&y)[3])
Definition: GPUClusterInfoAndMomentsCalculatorImpl.h:125
res
std::pair< std::vector< unsigned int >, bool > res
Definition: JetGroupProductTest.cxx:11
ClusterMomentsCalculator::partial_kahan_babushka_neumaier_sum
CUDA_HOS_DEV void partial_kahan_babushka_neumaier_sum(const float &to_add, float &sum, float &corr)
Definition: GPUClusterInfoAndMomentsCalculatorImpl.h:21
ClusterMomentsCalculator::corrected_cross_product
CUDA_HOS_DEV void corrected_cross_product(float(&res)[3], const float(&x)[3], const float(&y)[3])
Definition: GPUClusterInfoAndMomentsCalculatorImpl.h:101
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:76
ClusterMomentsCalculator::sum_kahan_babushka_neumaier
CUDA_HOS_DEV float sum_kahan_babushka_neumaier(const Floats &... fs)
Definition: GPUClusterInfoAndMomentsCalculatorImpl.h:40
a
TList * a
Definition: liststreamerinfos.cxx:10
y
#define y
ClusterMomentsCalculator::corrected_dot_product
CUDA_HOS_DEV float corrected_dot_product(const float(&a)[3], const float(&b)[3])
Definition: GPUClusterInfoAndMomentsCalculatorImpl.h:86
Herwig7_QED_EvtGen_ll.fs
dictionary fs
Definition: Herwig7_QED_EvtGen_ll.py:17
python.compressB64.c
def c
Definition: compressB64.py:93