45 #ifndef KOKKOS_HALF_HPP_ 46 #define KOKKOS_HALF_HPP_ 48 #include <type_traits> 49 #include <Kokkos_Macros.hpp> 52 #include <Cuda/Kokkos_Cuda_Half.hpp> 59 #ifndef KOKKOS_IMPL_HALF_TYPE_DEFINED 60 #define KOKKOS_IMPL_HALF_TYPE_DEFINED 61 #define KOKKOS_HALF_T_IS_FLOAT true 70 using half_t = Kokkos::Impl::half_impl_t::type;
73 KOKKOS_INLINE_FUNCTION
74 half_t cast_to_half(
float val) {
return half_t(val); }
75 KOKKOS_INLINE_FUNCTION
76 half_t cast_to_half(
bool val) {
return half_t(val); }
77 KOKKOS_INLINE_FUNCTION
78 half_t cast_to_half(
double val) {
return half_t(val); }
79 KOKKOS_INLINE_FUNCTION
80 half_t cast_to_half(
short val) {
return half_t(val); }
81 KOKKOS_INLINE_FUNCTION
82 half_t cast_to_half(
unsigned short val) {
return half_t(val); }
83 KOKKOS_INLINE_FUNCTION
84 half_t cast_to_half(
int val) {
return half_t(val); }
85 KOKKOS_INLINE_FUNCTION
86 half_t cast_to_half(
unsigned int val) {
return half_t(val); }
87 KOKKOS_INLINE_FUNCTION
88 half_t cast_to_half(
long val) {
return half_t(val); }
89 KOKKOS_INLINE_FUNCTION
90 half_t cast_to_half(
unsigned long val) {
return half_t(val); }
91 KOKKOS_INLINE_FUNCTION
92 half_t cast_to_half(
long long val) {
return half_t(val); }
93 KOKKOS_INLINE_FUNCTION
94 half_t cast_to_half(
unsigned long long val) {
return half_t(val); }
100 KOKKOS_INLINE_FUNCTION std::enable_if_t<
101 std::is_same<T, float>::value || std::is_same<T, bool>::value ||
102 std::is_same<T, double>::value || std::is_same<T, short>::value ||
103 std::is_same<T, unsigned short>::value || std::is_same<T, int>::value ||
104 std::is_same<T, unsigned int>::value || std::is_same<T, long>::value ||
105 std::is_same<T, unsigned long>::value ||
106 std::is_same<T, long long>::value ||
107 std::is_same<T, unsigned long long>::value,
109 cast_from_half(half_t val) {
117 #define KOKKOS_HALF_T_IS_FLOAT false 118 #endif // KOKKOS_IMPL_HALF_TYPE_DEFINED 119 #endif // KOKKOS_HALF_HPP_