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
94#if !defined(GPUCA_GPUCODE_DEVICE) || defined(__CUDACC__) || defined(__HIPCC__) // Double specialisations, not for OpenCL and Metal
95template <>
96GPUhdi() double copysign(double x, double y)
97{
98 return o2::gpu::GPUCommonMath::Copysignd(x, y);
99}
100template <>
101GPUhdi() double sqrt(double x)
102{
103 return o2::gpu::GPUCommonMath::Sqrtd(x);
104};
105template <>
106GPUdi() double log(double x)
107{
108 return o2::gpu::GPUCommonMath::Logd(x);
109};
110#endif
111
112#ifndef GPUCA_GPUCODE_DEVICE // Double overloads using std namespace not visible on GPU
113GPUhdi() double abs(double x)
114{
115 return std::abs(x);
116};
117template <>
118GPUdi() int nint(double x)
119{
120 return std::nearbyint(x);
121};
122template <>
123GPUdi() bool finite(double x)
124{
125#ifdef __FAST_MATH__
126 return false;
127#else
128 return std::isfinite(x);
129#endif
130}
131#endif
132
133} // namespace detail
134} // namespace math_utils
135} // namespace o2
136
137#endif /* MATHUTILS_INCLUDE_MATHUTILS_DETAIL_BASICMATH_H_ */
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