1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
#pragma once
namespace torch::jit::tensorexpr {
constexpr auto cpp_intrinsics_definition = R"(
namespace std {
template <typename T,
std::enable_if_t<std::is_floating_point_v<T>, int> = 0>
T rsqrt(T v) {
return 1.0f / std::sqrt(v);
}
template <typename T,
std::enable_if_t<std::is_floating_point_v<T>, int> = 0>
T frac(T v) {
T intpart;
return std::modf(v, &intpart);
}
template <typename From, typename To>
To bitcast(const From& v) {
assert(sizeof(To) == sizeof(From));
To res;
std::memcpy(&res, &v, sizeof(From));
return res;
}
} // namespace std
)";
} // namespace torch::jit::tensorexpr
|