Project
Loading...
Searching...
No Matches
basicMath.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
15
16#ifndef MATHUTILS_INCLUDE_MATHUTILS_DETAIL_BASICMATH_H_
17#define MATHUTILS_INCLUDE_MATHUTILS_DETAIL_BASICMATH_H_
18
19#include "GPUCommonDef.h"
20#include "GPUCommonMath.h"
22
23#ifndef GPUCA_GPUCODE_DEVICE
24#include <cmath>
25#include <tuple>
26#include <array>
27#endif
28
29namespace o2
30{
31namespace math_utils
32{
33namespace detail
34{
35
36template <typename T>
37GPUhdi() T copysign(T x, T y)
38{
39 return o2::gpu::GPUCommonMath::Copysign(x, y);
40}
41
42template <class T>
43GPUhdi() T min(const T x, const T y)
44{
45 return o2::gpu::GPUCommonMath::Min(x, y);
46};
47
48template <class T>
49GPUhdi() T max(const T x, const T y)
50{
51 return o2::gpu::GPUCommonMath::Max(x, y);
52};
53
54template <class T>
55GPUhdi() T sqrt(T x)
56{
57 return o2::gpu::GPUCommonMath::Sqrt(x);
58};
59
60template <class T>
61GPUhdi() T abs(T x)
62{
63 return o2::gpu::GPUCommonMath::Abs(x);
64};
65
66template <class T>
67GPUdi() int nint(T x)
68{
69 return o2::gpu::GPUCommonMath::Float2IntRn(x);
70};
71
72template <class T>
73GPUdi() bool finite(T x)
74{
75 return o2::gpu::GPUCommonMath::Finite(x);
76}
77
78GPUdi() unsigned int clz(unsigned int val)
79{
80 return o2::gpu::GPUCommonMath::Clz(val);
81};
82
83GPUdi() unsigned int popcount(unsigned int val)
84{
85 return o2::gpu::GPUCommonMath::Popcount(val);
86};
87
88template <class T>
89GPUdi() T log(T x)
90{
91 return o2::gpu::GPUCommonMath::Log(x);
92};
93
94#ifndef GPUCA_GPUCODE_DEVICE // Double overloads using std namespace not visible on GPU
95template <>
96GPUhdi() double copysign(double x, double y)
97{
98 return std::copysign(x, y);
99}
100template <>
101GPUhdi() double sqrt(double x)
102{
103 return std::sqrt(x);
104};
105GPUhdi() double abs(double x)
106{
107 return std::abs(x);
108};
109template <>
110GPUdi() int nint(double x)
111{
112 return std::nearbyint(x);
113};
114template <>
115GPUdi() bool finite(double x)
116{
117#ifdef __FAST_MATH__
118 return false;
119#else
120 return std::isfinite(x);
121#endif
122}
123template <>
124GPUdi() double log(double x)
125{
126 return std::log(x);
127};
128#endif
129
130} // namespace detail
131} // namespace math_utils
132} // namespace o2
133
134#endif /* MATHUTILS_INCLUDE_MATHUTILS_DETAIL_BASICMATH_H_ */
useful math constants
GLint GLenum GLint x
Definition glcorearb.h:403
GLuint GLfloat * val
Definition glcorearb.h:1582
return((dphi > 0 &&dphi< constants::math::PI)||dphi< -constants::math::PI) ? true GPUhdi() const expr bool okForPhiMax(T phiMax
GPUdi() int nint(T x)
Definition basicMath.h:67
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
constexpr size_t min
constexpr size_t max