-
Notifications
You must be signed in to change notification settings - Fork 0
Mathematical Functions
Motivating example (borrowed from https://llvm.org/docs/CompileCudaWithLLVM.html#standard-library-support)
// clang is OK with everything in this function.
__device__ void test() {
std::sin(0.); // nvcc - ok
std::sin(0); // nvcc - error, because no std::sin(int) override is available.
sin(0); // nvcc - same as above.
sinf(0.); // nvcc - ok
std::sinf(0.); // nvcc - no such function
}Kokkos' goal is to provide a consistent overload set that is available on host and device and that follows practice from the C++ numerics library.
Defined in
header <Kokkos_MathematicalFunctions.hpp>
which is included from <Kokkos_Core.hpp>
Provides most of the standard C mathematical functions from <cmath>, such as fabs, sqrt, and sin.
Math functions are available in the Kokkos::Experimental namespace.
Below is the synopsis for sqrt as an example of unary math function.
namespace Kokkos::Experimental {
KOKKOS_FUNCTION float sqrt ( float x );
KOKKOS_FUNCTION float sqrtf( float x );
KOKKOS_FUNCTION double sqrt ( double x );
long double sqrt ( long double x );
long double sqrtl( long double x );
KOKKOS_FUNCTION double sqrt ( IntegralType x );
}The function is overloaded for any argument of arithmetic type. Additional
functions with f and l suffixes that work on float and long double
respectively are also available. Please note, that long double overloads are
not available on the device.
See below the list of common mathematical functions supported. We refer the reader to cppreference.com for the synopsis of each individual function.
denotes functions that are currently not provided by Kokkosfunc
func* denotes functions not available with the SYCL backend
Basic operations
abs
fabs
fmod
remainder
remquofmafmax
fmin
fdim
nan
Exponential functions
exp
exp2
expm1
log
log10
log2
log1p
Power functions
pow
sqrt
cbrt
hypot
Trigonometric functions
sin
cos
tan
asin
acos
atan
atan2
Hyperbolic functions
sinh
cosh
tanh
asinh
acosh
atanh
Error and gamma functions
erf
erfc
tgamma
lgamma
Nearest integer floating point operations
ceil
floor
trunc
roundlroundllroundnearbyint*
rintlrintllrint
Floating point manipulation functions
frexpldexpmodfscalbnscalblniloglogbnextafternexttowardcopysign
Classification and comparison
fpclassifyisfinite
isinf
isnan
isnormalisgreaterisgreaterequalislessislessequalislessgreaterisunordered
NOTE Feel free to open an issue if you need one of the functions that is currently not implemented. Issue #4767 is keeping track of these and has notes about implementability.
See also
Mathematical constants
Numeric traits
Home:
- Introduction
- Machine Model
- Programming Model
- Compiling
- Initialization
- View
- Parallel Dispatch
- Hierarchical Parallelism
- Custom Reductions
- Atomic Operations
- Subviews
- Interoperability
- Kokkos and Virtual Functions
- Initialization and Finalization
- View
- Data Parallelism
- Execution Policies
- Spaces
- Task Parallelism
- Utilities
- STL Compatibility
- Numerics
- Detection Idiom