10 #include <type_traits>
16 template <
typename Scale, Scale lhs>
19 template <
typename Right>
26 template <
typename Scale>
29 static_assert(std::is_copy_constructible_v<Scale>);
33 template <
typename Right>
35 -> decltype(std::declval<const Scale&>() * rhs)
45 template <
typename Scale>
46 __host__ __device__
scales(Scale)->scales<Scale>;
48 template <
typename Left =
void,
typename Right = Left>
52 -> decltype(lhs + rhs)
61 template <
typename Left,
typename Right>
63 -> decltype(lhs + rhs)
70 __host__ __device__
plus()->plus<void,
void>;
72 template <
typename Left =
void,
typename Right = Left>
76 -> decltype(lhs - rhs)
85 template <
typename Left,
typename Right>
87 -> decltype(lhs - rhs)
94 __host__ __device__
minus()->minus<void,
void>;
96 template <
typename Left =
void,
typename Right = Left>
100 -> decltype(lhs * rhs)
109 template <
typename Left,
typename Right>
111 -> decltype(lhs * rhs)
120 template <
typename T>
126 template <
typename T>
132 template <
typename T>
137 static_assert(std::is_same<T, index_t>{} || std::is_same<T, int>{},
"wrong type");
142 template <
typename X,
typename Y>
148 template <
typename X,
typename Y>
154 template <
typename X,
typename Y>
160 template <
typename T>
166 template <
typename T>
169 return x > y ? x : y;
172 template <
typename T>
175 return x > y ? x : y;
181 return __builtin_fmaxf(x, y);
187 return __builtin_fmax(x, y);
193 return X > y ? X : y;
199 return x > Y ? x : Y;
202 template <
typename X,
typename... Ys>
205 static_assert(
sizeof...(Ys) > 0,
"not enough argument");
206 return max(x,
max(ys...));
209 template <
typename T>
215 template <
typename T>
218 return x < y ? x : y;
221 template <
typename T>
224 return x < y ? x : y;
230 return __builtin_fminf(x, y);
236 return __builtin_fmin(x, y);
242 return X < y ? X : y;
248 return x < Y ? x : Y;
251 template <
typename X,
typename... Ys>
254 static_assert(
sizeof...(Ys) > 0,
"not enough argument");
255 return min(x,
min(ys...));
258 template <
typename T>
261 return min(
max(x, lowerbound), upperbound);
278 else if(x == y || x == 0)
288 return gcd(x % y, y);
292 return gcd(x, y % x);
296 template <index_t X, index_t Y>
299 constexpr
auto r =
gcd(X, Y);
304 template <
typename X,
309 return gcd(x,
gcd(ys...));
313 template <
typename X,
typename Y>
316 return (x * y) /
gcd(x, y);
319 template <
typename X,
324 return lcm(x,
lcm(ys...));
327 template <
typename Left =
void,
typename Right = Left>
331 -> decltype(lhs == rhs)
340 template <
typename Left,
typename Right>
342 -> decltype(lhs == rhs)
349 __host__ __device__
equal()->equal<void,
void>;
356 return bit_cast<uint32_t>(lhs) == bit_cast<uint32_t>(rhs);
365 return bit_cast<uint64_t>(lhs) == bit_cast<uint64_t>(rhs);
369 template <
typename Left =
void,
typename Right = Left>
373 -> decltype(lhs < rhs)
382 template <
typename Left,
typename Right>
384 -> decltype(lhs < rhs)
391 __host__ __device__
less()->less<void,
void>;
393 template <
typename Left =
void,
typename Right = Left>
397 -> decltype(lhs <= rhs)
406 template <
typename Left,
typename Right>
408 -> decltype(lhs <= rhs)
422 return lhs < rhs || bit_cast<uint32_t>(lhs) == bit_cast<uint32_t>(rhs);
431 return lhs < rhs || bit_cast<uint64_t>(lhs) == bit_cast<uint64_t>(rhs);
438 return 1 << (32 -
clz(x - 1));
459 return 31 - __builtin_clz(x);
469 #define C_LOG2E 1.44269504088896340736
472 template <
typename T>
487 template <
typename T =
double>
491 float exp2(
float x) {
return exp2f(x); };
494 float exp2(
float x) {
return std::exp2f(x); };
498 return __builtin_amdgcn_sad_u16(x, y, acc);
505 asm volatile(
"v_sad_u32 %0, %1, %2, %3" :
"=v"(res) :
"v"(x),
"v"(y),
"v"(acc));
511 return (x > y ? (x - y) : (y - x)) + acc;
522 #ifndef __HIP_DEVICE_COMPILE__
527 #if CK_TILE_WORKAROUND_SWDEV_383542
539 int8_t sgn = x >> (8 - 1);
541 return (x ^ sgn) - sgn;
546 int32_t sgn = x >> (32 - 1);
548 return (x ^ sgn) - sgn;
553 uint16_t xx = bit_cast<uint16_t>(x);
555 uint16_t abs_xx = xx & 0x7fff;
557 fp16_t abs_x = bit_cast<fp16_t>(abs_xx);
562 #ifdef CK_TILE_EXPERIMENTAL_BIT_INT_EXTENSION_INT4
565 int4_t sgn = x >> (4 - 1);
566 return (x ^ sgn) - sgn;
588 uint16_t xx = bit_cast<uint16_t>(x);
590 return (xx & 0x7FFF) > 0x7C00;
593 #ifdef CK_TILE_EXPERIMENTAL_BIT_INT_EXTENSION_INT4
610 template <
typename T>
613 return type_convert<T>(std::tanhf(type_convert<float>(x)));
619 return std::tanhf(x);
628 template <
typename T>
631 return type_convert<T>(std::acosf(type_convert<float>(x)));
637 return std::acosf(x);
646 template <
typename T>
649 return type_convert<T>(-(type_convert<float>(x)));
676 template <
typename T>
679 return type_convert<T>(std::atanf(type_convert<float>(x)));
685 return std::atanf(x);
694 template <
typename T>
697 return type_convert<T>(std::sinf(type_convert<float>(x)));
712 template <
typename T>
715 return type_convert<T>(std::asinf(type_convert<float>(x)));
721 return std::asinf(x);
730 template <
typename T>
733 return type_convert<T>(std::asinhf(type_convert<float>(x)));
739 return std::asinhf(x);
748 template <
typename T>
751 return type_convert<T>(std::cosf(type_convert<float>(x)));
766 template <
typename T>
769 return type_convert<T>(std::acoshf(type_convert<float>(x)));
775 return std::acoshf(x);
784 template <
typename T>
787 return type_convert<T>(std::tanf(type_convert<float>(x)));
802 template <
typename T>
805 return type_convert<T>(std::atanhf(type_convert<float>(x)));
811 return std::atanhf(x);
820 template <
typename T>
823 return type_convert<T>(std::sinhf(type_convert<float>(x)));
829 return std::sinhf(x);
838 template <
typename T>
841 return type_convert<T>(std::ceilf(type_convert<float>(x)));
847 return std::ceilf(x);
856 template <
typename T>
859 return type_convert<T>(std::coshf(type_convert<float>(x)));
865 return std::coshf(x);
874 template <
typename T>
877 return type_convert<T>(std::floorf(type_convert<float>(x)));
883 return std::floorf(x);
892 template <
typename T>
895 return type_convert<T>(1.f / type_convert<float>(x));
898 template <
typename T>
901 return type_convert<T>(std::expf(type_convert<float>(x)));
916 template <
typename T>
919 return type_convert<T>(std::logf(type_convert<float>(x)));
934 template <
typename T>
937 return type_convert<T>(std::powf(type_convert<float>(x), type_convert<float>(gamma)));
943 return std::powf(x, gamma);
952 template <
typename T>
955 return type_convert<T>(std::expm1f(type_convert<float>(x)));
961 return std::expm1f(x);
980 y.u32 = y.u32 & 0x7fffffff;
988 int8_t sgn = x >> (8 - 1);
990 return (x ^ sgn) - sgn;
995 int32_t sgn = x >> (32 - 1);
997 return (x ^ sgn) - sgn;
1000 #ifdef CK_TILE_EXPERIMENTAL_BIT_INT_EXTENSION_INT4
1003 int4_t sgn = x >> (4 - 1);
1005 return (x ^ sgn) - sgn;
1011 uint16_t xx = bit_cast<uint16_t>(x);
1013 uint16_t abs_xx = xx & 0x7fff;
1015 fp16_t abs_x = bit_cast<fp16_t>(abs_xx);
1036 #ifdef CK_TILE_EXPERIMENTAL_BIT_INT_EXTENSION_INT4
1046 uint16_t xx = bit_cast<uint16_t>(x);
1048 return (xx & 0x7FFF) > 0x7C00;
1053 return static_cast<fp16_t>(__builtin_amdgcn_sqrtf(
static_cast<float>(x)));
1060 template <
typename T>
1063 return type_convert<T>(::tanhf(type_convert<float>(x)));
1078 template <
typename T>
1081 return type_convert<T>(::acosf(type_convert<float>(x)));
1096 template <
typename T>
1099 return type_convert<T>(-(type_convert<float>(x)));
1132 template <
typename T>
1135 return type_convert<T>(::atanf(type_convert<float>(x)));
1150 template <
typename T>
1153 return type_convert<T>(::sinf(type_convert<float>(x)));
1171 return __ocml_sin_f16(x);
1174 template <
typename T>
1177 return type_convert<T>(::asinf(type_convert<float>(x)));
1192 template <
typename T>
1195 return type_convert<T>(::asinhf(type_convert<float>(x)));
1210 template <
typename T>
1213 return type_convert<T>(::acoshf(type_convert<float>(x)));
1228 template <
typename T>
1231 return type_convert<T>(::tanf(type_convert<float>(x)));
1246 template <
typename T>
1249 return type_convert<T>(::atanhf(type_convert<float>(x)));
1264 template <
typename T>
1267 return type_convert<T>(::sinhf(type_convert<float>(x)));
1282 template <
typename T>
1285 return type_convert<T>(::ceilf(type_convert<float>(x)));
1303 return __ocml_ceil_f16(x);
1306 template <
typename T>
1309 return type_convert<T>(::coshf(type_convert<float>(x)));
1324 template <
typename T>
1327 return type_convert<T>(::floorf(type_convert<float>(x)));
1345 return __ocml_floor_f16(x);
1348 template <
typename T>
1351 #if !CK_TILE_WORKAROUND_SWDEV_383542
1352 return __frcp_rn(x);
1355 return __builtin_amdgcn_rcpf(x);
1359 template <
typename T>
1362 return type_convert<T>(__ocml_exp_f32(type_convert<float>(x)));
1368 return __ocml_exp_f16(x);
1374 return __ocml_exp_f32(x);
1383 template <
typename T>
1386 return type_convert<T>(__logf(type_convert<float>(x)));
1392 return __ocml_log_f16(x);
1407 template <
typename T>
1410 return type_convert<T>(powf(type_convert<float>(x), type_convert<float>(gamma)));
1416 return powf(x, gamma);
1422 return pow(x, gamma);
1425 template <
typename T>
1428 return type_convert<T>(expm1f(type_convert<float>(x)));
#define CK_TILE_DEVICE
Definition: config.hpp:40
#define CK_TILE_HOST
Definition: config.hpp:39
#define CK_TILE_HOST_DEVICE
Definition: config.hpp:41
Definition: cluster_descriptor.hpp:13
__host__ __device__ less_equal() -> less_equal< void, void >
FIXME: create macro to replace 'host device' and nothing more.
CK_TILE_DEVICE T pow(T x, T gamma)
Definition: math.hpp:1408
CK_TILE_DEVICE T tanh(T x)
Definition: math.hpp:1061
CK_TILE_DEVICE bfloat16_t log(bfloat16_t x)
Definition: bfloat16.hpp:423
CK_TILE_HOST bool isnan(fp16_t x)
Definition: math.hpp:586
constexpr CK_TILE_HOST_DEVICE T clamp(const T &x, const T &lowerbound, const T &upperbound)
Definition: math.hpp:259
CK_TILE_HOST double tan< double >(double x)
Definition: math.hpp:797
constexpr CK_TILE_HOST_DEVICE auto integer_least_multiple(X x, Y y)
Definition: math.hpp:155
CK_TILE_HOST T acos(T x)
Definition: math.hpp:629
__host__ __device__ multiplies() -> multiplies< void, void >
FIXME: create macro to replace 'host device' and nothing more.
CK_TILE_DEVICE T exp(T x)
Definition: math.hpp:1360
CK_TILE_HOST int32_t neg< int32_t >(int32_t x)
Definition: math.hpp:665
constexpr CK_TILE_HOST_DEVICE auto integer_divide_ceil(X x, Y y)
Definition: math.hpp:149
CK_TILE_HOST double atan< double >(double x)
Definition: math.hpp:689
CK_TILE_HOST float tan< float >(float x)
Definition: math.hpp:791
CK_TILE_HOST float asinh< float >(float x)
Definition: math.hpp:737
CK_TILE_HOST double pow< double >(double x, double gamma)
Definition: math.hpp:947
CK_TILE_HOST fp16_t abs(fp16_t x)
Definition: math.hpp:551
CK_TILE_DEVICE fp16_t exp< fp16_t >(fp16_t x)
Definition: math.hpp:1366
CK_TILE_HOST float tanh< float >(float x)
Definition: math.hpp:617
constexpr CK_TILE_HOST_DEVICE bool is_power_of_two_integer(int32_t x)
Definition: math.hpp:462
_Float16 fp16_t
Definition: half.hpp:110
CK_TILE_HOST double sinh< double >(double x)
Definition: math.hpp:833
CK_TILE_DEVICE T tan(T x)
Definition: math.hpp:1229
int8_t int8_t
Definition: int8.hpp:20
CK_TILE_HOST T cos(T x)
Definition: math.hpp:749
constexpr CK_TILE_HOST_DEVICE int32_t next_power_of_two(int32_t x)
Definition: math.hpp:435
CK_TILE_DEVICE T acosh(T x)
Definition: math.hpp:1211
CK_TILE_DEVICE fp16_t ceil< fp16_t >(fp16_t x)
Definition: math.hpp:1301
CK_TILE_HOST float log< float >(float x)
Definition: math.hpp:923
CK_TILE_HOST double asinh< double >(double x)
Definition: math.hpp:743
CK_TILE_HOST float atanh< float >(float x)
Definition: math.hpp:809
CK_TILE_HOST float cos< float >(float x)
Definition: math.hpp:755
CK_TILE_DEVICE T log(T x)
Definition: math.hpp:1384
constexpr T log2e_v
Definition: math.hpp:488
CK_TILE_HOST float neg< float >(float x)
Definition: math.hpp:653
CK_TILE_HOST T ceil(T x)
Definition: math.hpp:839
CK_TILE_HOST T acosh(T x)
Definition: math.hpp:767
CK_TILE_DEVICE T sin(T x)
Definition: math.hpp:1151
CK_TILE_HOST T expm1(T x)
Definition: math.hpp:953
__host__ __device__ minus() -> minus< void, void >
FIXME: create macro to replace 'host device' and nothing more.
CK_TILE_HOST double atanh< double >(double x)
Definition: math.hpp:815
int32_t index_t
Definition: integer.hpp:9
CK_TILE_DEVICE T floor(T x)
Definition: math.hpp:1325
CK_TILE_HOST float pow< float >(float x, float gamma)
Definition: math.hpp:941
CK_TILE_DEVICE fp16_t log< fp16_t >(fp16_t x)
Definition: math.hpp:1390
CK_TILE_DEVICE T expm1(T x)
Definition: math.hpp:1426
CK_TILE_HOST double cos< double >(double x)
Definition: math.hpp:761
CK_TILE_HOST T tanh(T x)
Definition: math.hpp:611
constexpr CK_TILE_HOST_DEVICE index_t gcd(index_t x, index_t y)
Definition: math.hpp:268
CK_TILE_DEVICE bfloat16_t sqrt(bfloat16_t x)
Definition: bfloat16.hpp:408
CK_TILE_DEVICE T acos(T x)
Definition: math.hpp:1079
CK_TILE_DEVICE T atan(T x)
Definition: math.hpp:1133
__host__ __device__ less() -> less< void, void >
FIXME: create macro to replace 'host device' and nothing more.
__host__ __device__ scales(Scale) -> scales< Scale >
FIXME: create macro to replace 'host device' and nothing more.
CK_TILE_HOST float asin< float >(float x)
Definition: math.hpp:719
CK_TILE_HOST double ceil< double >(double x)
Definition: math.hpp:851
constexpr CK_TILE_HOST_DEVICE int32_t integer_log2_floor(int32_t x)
Definition: math.hpp:455
CK_TILE_DEVICE fp16_t neg< fp16_t >(fp16_t x)
Definition: math.hpp:1127
CK_TILE_HOST double neg< double >(double x)
Definition: math.hpp:659
CK_TILE_HOST float atan< float >(float x)
Definition: math.hpp:683
CK_TILE_HOST T atan(T x)
Definition: math.hpp:677
CK_TILE_DEVICE fp16_t floor< fp16_t >(fp16_t x)
Definition: math.hpp:1343
Right
Definition: math.hpp:327
constexpr CK_TILE_HOST_DEVICE auto integer_divide_floor(X x, Y y)
Definition: math.hpp:143
CK_TILE_HOST double floor< double >(double x)
Definition: math.hpp:887
CK_TILE_HOST T sin(T x)
Definition: math.hpp:695
__host__ __device__ equal() -> equal< void, void >
FIXME: create macro to replace 'host device' and nothing more.
CK_TILE_HOST float acos< float >(float x)
Definition: math.hpp:635
CK_TILE_DEVICE uint32_t sad_u32(uint32_t x, uint32_t y, uint32_t acc)
Definition: math.hpp:501
CK_TILE_HOST T floor(T x)
Definition: math.hpp:875
CK_TILE_HOST T sinh(T x)
Definition: math.hpp:821
CK_TILE_HOST T asin(T x)
Definition: math.hpp:713
CK_TILE_DEVICE T atanh(T x)
Definition: math.hpp:1247
CK_TILE_HOST double tanh< double >(double x)
Definition: math.hpp:623
CK_TILE_HOST T asinh(T x)
Definition: math.hpp:731
CK_TILE_DEVICE bfloat16_t exp(bfloat16_t x)
Definition: bfloat16.hpp:414
CK_TILE_HOST double sin< double >(double x)
Definition: math.hpp:707
CK_TILE_HOST float exp< float >(float x)
Definition: math.hpp:905
CK_TILE_HOST float floor< float >(float x)
Definition: math.hpp:881
CK_TILE_HOST int clz(uint32_t x)
Definition: math.hpp:264
CK_TILE_HOST int8_t neg< int8_t >(int8_t x)
Definition: math.hpp:671
CK_TILE_HOST double acos< double >(double x)
Definition: math.hpp:641
CK_TILE_HOST float acosh< float >(float x)
Definition: math.hpp:773
CK_TILE_DEVICE uint16_t sad_u16(uint16_t x, uint16_t y, uint16_t acc)
Definition: math.hpp:496
CK_TILE_HOST double acosh< double >(double x)
Definition: math.hpp:779
Y constexpr CK_TILE_HOST_DEVICE auto lcm(X x, Y y)
Definition: math.hpp:314
CK_TILE_HOST_DEVICE bfloat16_t abs(const bfloat16_t &x)
Definition: bfloat16.hpp:395
CK_TILE_HOST T atanh(T x)
Definition: math.hpp:803
CK_TILE_HOST T neg(T x)
Definition: math.hpp:647
CK_TILE_HOST double asin< double >(double x)
Definition: math.hpp:725
CK_TILE_DEVICE T ceil(T x)
Definition: math.hpp:1283
CK_TILE_DEVICE T asin(T x)
Definition: math.hpp:1175
CK_TILE_HOST double cosh< double >(double x)
Definition: math.hpp:869
CK_TILE_DEVICE T sinh(T x)
Definition: math.hpp:1265
CK_TILE_DEVICE T cosh(T x)
Definition: math.hpp:1307
CK_TILE_HOST float expm1< float >(float x)
Definition: math.hpp:959
CK_TILE_HOST_DEVICE bool isnan(const bfloat16_t &x)
Definition: bfloat16.hpp:401
CK_TILE_HOST double sqrt(double x)
Definition: math.hpp:608
CK_TILE_DEVICE T asinh(T x)
Definition: math.hpp:1193
CK_TILE_HOST T tan(T x)
Definition: math.hpp:785
CK_TILE_DEVICE fp16_t sin< fp16_t >(fp16_t x)
Definition: math.hpp:1169
CK_TILE_HOST float sin< float >(float x)
Definition: math.hpp:701
CK_TILE_HOST T cosh(T x)
Definition: math.hpp:857
CK_TILE_HOST double expm1< double >(double x)
Definition: math.hpp:965
CK_TILE_HOST double log< double >(double x)
Definition: math.hpp:929
CK_TILE_HOST float cosh< float >(float x)
Definition: math.hpp:863
constexpr CK_TILE_HOST_DEVICE T min(T x)
Definition: math.hpp:210
CK_TILE_HOST float ceil< float >(float x)
Definition: math.hpp:845
constexpr CK_TILE_HOST_DEVICE T max(T x)
Definition: math.hpp:161
CK_TILE_HOST T pow(T x, T gamma)
Definition: math.hpp:935
CK_TILE_HOST T rcp(T x)
Definition: math.hpp:893
CK_TILE_HOST double exp< double >(double x)
Definition: math.hpp:911
CK_TILE_DEVICE bfloat16_t exp2(bfloat16_t x)
Definition: bfloat16.hpp:420
CK_TILE_HOST float sinh< float >(float x)
Definition: math.hpp:827
__host__ __device__ plus() -> plus< void, void >
FIXME: create macro to replace 'host device' and nothing more.
_BitInt(4) int4_t
Definition: data_type.hpp:26
std::enable_if< B, T > enable_if
Definition: enable_if.hpp:10
Definition: integral_constant.hpp:13
constexpr CK_TILE_HOST_DEVICE bool operator()(double lhs, double rhs) const
Definition: math.hpp:363
constexpr CK_TILE_HOST_DEVICE bool operator()(float lhs, float rhs) const
Definition: math.hpp:354
constexpr CK_TILE_HOST_DEVICE auto operator()(const Left &lhs, const Right &rhs) const -> decltype(lhs==rhs)
Definition: math.hpp:341
constexpr CK_TILE_HOST_DEVICE T operator()(T a, T b) const
Definition: math.hpp:135
constexpr CK_TILE_HOST_DEVICE auto operator()(const Left &lhs, const Right &rhs) const -> decltype(lhs< rhs)
Definition: math.hpp:383
constexpr CK_TILE_HOST_DEVICE bool operator()(double lhs, double rhs) const
Definition: math.hpp:429
constexpr CK_TILE_HOST_DEVICE bool operator()(float lhs, float rhs) const
Definition: math.hpp:420
constexpr CK_TILE_HOST_DEVICE auto operator()(const Left &lhs, const Right &rhs) const -> decltype(lhs<=rhs)
Definition: math.hpp:407
constexpr CK_TILE_HOST_DEVICE auto operator()(const Left &lhs, const Right &rhs) const -> decltype(lhs<=rhs)
Definition: math.hpp:396
constexpr CK_TILE_HOST_DEVICE auto operator()(const Left &lhs, const Right &rhs) const -> decltype(lhs< rhs)
Definition: math.hpp:372
constexpr CK_TILE_HOST_DEVICE T operator()(T a, T b) const
Definition: math.hpp:123
constexpr CK_TILE_HOST_DEVICE T operator()(T a, T b) const
Definition: math.hpp:129
constexpr CK_TILE_HOST_DEVICE auto operator()(const Left &lhs, const Right &rhs) const -> decltype(lhs - rhs)
Definition: math.hpp:86
constexpr CK_TILE_HOST_DEVICE auto operator()(const Left &lhs, const Right &rhs) const -> decltype(lhs - rhs)
Definition: math.hpp:75
constexpr CK_TILE_HOST_DEVICE auto operator()(const Left &lhs, const Right &rhs) const -> decltype(lhs *rhs)
Definition: math.hpp:110
constexpr CK_TILE_HOST_DEVICE auto operator()(const Left &lhs, const Right &rhs) const -> decltype(lhs *rhs)
Definition: math.hpp:99
constexpr CK_TILE_HOST_DEVICE auto operator()(const Left &lhs, const Right &rhs) const -> decltype(lhs+rhs)
Definition: math.hpp:62
constexpr CK_TILE_HOST_DEVICE auto operator()(const Left &lhs, const Right &rhs) const -> decltype(lhs+rhs)
Definition: math.hpp:51
constexpr CK_TILE_HOST_DEVICE auto operator()(const Right &rhs) const -> decltype(lhs *rhs)
Definition: math.hpp:20
constexpr CK_TILE_HOST_DEVICE auto operator()(const Right &rhs) const -> decltype(std::declval< const Scale & >() *rhs)
Definition: math.hpp:34
constexpr CK_TILE_HOST_DEVICE scales(Scale lhs)
Definition: math.hpp:31
#define C_LOG2E
Definition: math.hpp:469