/usr/local/lib64/python3.6/site-packages/torch/include/ATen
Edit: /usr/local/lib64/python3.6/site-packages/torch/include/ATen/NumericUtils.h (2787B)
#pragma once
#ifdef __HIPCC__
#include
#endif
#include
#include
#include
#include
#include
#include
namespace at {
// std::isnan isn't performant to use on integral types; it will
// (uselessly) convert to floating point and then do the test.
// This function is.
template ::value, int>::type = 0>
inline C10_HOST_DEVICE bool _isnan(T val) {
return false;
}
template ::value, int>::type = 0>
inline C10_HOST_DEVICE bool _isnan(T val) {
#if defined(__CUDACC__) || defined(__HIPCC__)
return ::isnan(val);
#else
return std::isnan(val);
#endif
}
template ::value, int>::type = 0>
inline bool _isnan(T val) {
return std::isnan(val.real()) || std::isnan(val.imag());
}
template ::value, int>::type = 0>
inline C10_HOST_DEVICE bool _isnan(T val) {
return at::_isnan(static_cast(val));
}
template ::value, int>::type = 0>
inline C10_HOST_DEVICE bool _isnan(at::BFloat16 val) {
return at::_isnan(static_cast(val));
}
inline C10_HOST_DEVICE bool _isnan(at::BFloat16 val) {
return at::_isnan(static_cast(val));
}
template
C10_HOST_DEVICE inline T exp(T x) {
static_assert(!std::is_same::value, "this template must be used with float or less precise type");
#if defined(__CUDA_ARCH__) || defined(__HIP_ARCH__)
// use __expf fast approximation for peak bandwidth
return __expf(x);
#else
return ::exp(x);
#endif
}
template <>
C10_HOST_DEVICE inline double exp(double x) {
return ::exp(x);
}
template
C10_HOST_DEVICE inline T log(T x) {
static_assert(!std::is_same::value, "this template must be used with float or less precise type");
#if defined(__CUDA_ARCH__) || defined(__HIP_ARCH__)
// use __logf fast approximation for peak bandwidth
return __logf(x);
#else
return ::log(x);
#endif
}
template <>
C10_HOST_DEVICE inline double log(double x) {
return ::log(x);
}
template
C10_HOST_DEVICE inline T tan(T x) {
static_assert(!std::is_same::value, "this template must be used with float or less precise type");
#if defined(__CUDA_ARCH__) || defined(__HIP_ARCH__)
// use __tanf fast approximation for peak bandwidth
return __tanf(x);
#else
return ::tan(x);
#endif
}
template <>
C10_HOST_DEVICE inline double tan(double x) {
return ::tan(x);
}
} // namespace at