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() constexpr 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
94template <class T>
95GPUdi() T exp(T x)
96{
97 return o2::gpu::GPUCommonMath::Exp(x);
98};
99
100#if !defined(GPUCA_GPUCODE_DEVICE) || defined(__CUDACC__) || defined(__HIPCC__) // Double specialisations, not for OpenCL and Metal
101template <>
102GPUhdi() double copysign(double x, double y)
103{
104 return o2::gpu::GPUCommonMath::Copysignd(x, y);
105}
106template <>
107GPUhdi() double sqrt(double x)
108{
109 return o2::gpu::GPUCommonMath::Sqrtd(x);
110};
111template <>
112GPUdi() double log(double x)
113{
114 return o2::gpu::GPUCommonMath::Logd(x);
115};
116template <>
117GPUdi() double exp(double x)
118{
119 return o2::gpu::GPUCommonMath::Expd(x);
120};
121#endif
122
123#ifndef GPUCA_GPUCODE_DEVICE // Double overloads using std namespace not visible on GPU
124GPUhdi() double abs(double x)
125{
126 return std::abs(x);
127};
128template <>
129GPUdi() int nint(double x)
130{
131 return std::nearbyint(x);
132};
133template <>
134GPUdi() bool finite(double x)
135{
136#ifdef __FAST_MATH__
137 return false;
138#else
139 return std::isfinite(x);
140#endif
141}
142#endif
143
144} // namespace detail
145} // namespace math_utils
146} // namespace o2
147
148#endif /* MATHUTILS_INCLUDE_MATHUTILS_DETAIL_BASICMATH_H_ */
uint64_t exp(uint64_t base, uint8_t exp) noexcept
useful math constants
GLint GLenum GLint x
Definition glcorearb.h:403
GLint y
Definition glcorearb.h:270
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