/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/ck/utility/numeric_utils.hpp Source File

/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/ck/utility/numeric_utils.hpp Source File#

Composable Kernel: /home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/ck/utility/numeric_utils.hpp Source File
numeric_utils.hpp
Go to the documentation of this file.
1 // SPDX-License-Identifier: MIT
2 // // Copyright (c) 2025, Advanced Micro Devices, Inc. All rights reserved.
3 #pragma once
5 
6 namespace ck {
7 
8 template <typename T>
10 {
11 };
12 
13 #ifndef CK_CODE_GEN_RTC
14 template <>
16 {
17  static constexpr int exp = 8;
18  static constexpr int mant = 0;
19  static constexpr int bias = 127;
20 
21  static constexpr int unbiased_exp_min = -127;
22  static constexpr int unbiased_exp_max = 127;
23  static constexpr int biased_exp_min = 0;
24  static constexpr int biased_exp_max = 254;
25 
27 };
28 #endif
29 
30 template <>
31 struct NumericUtils<float>
32 {
33  static constexpr int exp = 8;
34  static constexpr int mant = 23;
35  static constexpr int bias = 127;
36  static constexpr uint32_t nan_mask = 0x7F800000;
37  static constexpr uint32_t head_mask = 0xFF800000;
38  static constexpr uint32_t mant_mask = 0x7FFFFF;
39  static constexpr uint32_t exp_mask = 0xFF;
40  static constexpr uint32_t Inf = 0x7F800000;
41  static constexpr uint32_t NegInf = 0xFF800000;
42  static constexpr uint32_t NaN = 0x7F800001;
43  static constexpr uint32_t Neg0 = 0x80000000;
44  static constexpr bool has_inf = true;
46 };
47 
48 template <>
50 {
51  static constexpr int exp = 5;
52  static constexpr int mant = 10;
53  static constexpr int bias = 15;
54  static constexpr uint16_t nan_mask = 0x7C00;
55  static constexpr uint16_t head_mask = 0xFC00;
56  static constexpr uint16_t mant_mask = 0x3FF;
57  static constexpr uint16_t exp_mask = 0x1F;
58  static constexpr uint32_t Inf = 0x7C00;
59  static constexpr uint32_t NegInf = 0xFC00;
60  static constexpr uint32_t NaN = 0x7C01;
61  static constexpr uint32_t Neg0 = 0x8000;
62  static constexpr bool has_inf = true;
64 };
65 
66 template <>
68 {
69  static constexpr int exp = 8;
70  static constexpr int mant = 7;
71  static constexpr int bias = 128; // negative zero nan mode
72  // static constexpr int bias = 127; // ieee mode
73 };
74 
75 template <>
77 {
78  static constexpr int exp = 4;
79  static constexpr int mant = 3;
80  static constexpr int bias = 8; // negative zero nan mode
81  // static constexpr int bias = 7; // ieee mode
82  static constexpr bool has_inf = false;
83 };
84 
85 template <>
87 {
88  static constexpr int exp = 5;
89  static constexpr int mant = 2;
90  static constexpr int bias = 16; // negative zero nan mode
91  // static constexpr int bias = 15; // ieee mode
92  static constexpr bool has_inf = false;
93 };
94 template <>
96 {
97  static constexpr int exp = 4;
98  static constexpr int mant = 3;
99  static constexpr int bias = 7;
100 };
101 
102 template <>
104 {
105  static constexpr int exp = 5;
106  static constexpr int mant = 2;
107  static constexpr int bias = 15;
108 };
109 
110 template <>
112 {
113  static constexpr int exp = 2;
114  static constexpr int mant = 1;
115  static constexpr int bias = 1;
116  static constexpr uint32_t sr_shift = 10;
117 
118  static constexpr int unbiased_exp_min = 0;
119  static constexpr int unbiased_exp_max = 2;
120  static constexpr int biased_exp_min = 1;
121  static constexpr int biased_exp_max = 3;
122 
123  static constexpr uint8_t positive_zero_mask = 0b0000;
124  static constexpr uint8_t negative_zero_mask = 0b1000;
125 
126  static constexpr uint8_t one_mask = 0b0010;
127  static constexpr uint8_t set_sign_mask = 0b0111;
128 
129  static constexpr uint8_t data_max_positive_normal_mask = 0b0111;
130  static constexpr uint8_t data_max_negative_normal_mask = 0b1111;
131 
132  static constexpr uint8_t data_max_positive_subnormal_mask = 0b0001;
133  static constexpr uint8_t data_max_negative_subnormal_mask = 0b1001;
134 
135  static constexpr bool has_inf = false;
136 
138 };
139 
140 template <>
142 {
143  static constexpr int exp = 2;
144  static constexpr int mant = 3;
145  static constexpr int bias = 1;
146  static constexpr uint32_t sr_shift = 12;
147 
148  static constexpr int unbiased_exp_min = 0;
149  static constexpr int unbiased_exp_max = 2;
150  static constexpr int biased_exp_min = 1;
151  static constexpr int biased_exp_max = 3;
152 
153  static constexpr uint8_t positive_zero_mask = 0b000000;
154  static constexpr uint8_t negative_zero_mask = 0b100000;
155 
156  static constexpr uint8_t set_sign_mask = 0b011111;
157 
158  static constexpr uint8_t data_max_positive_normal_mask = 0b011111;
159  static constexpr uint8_t data_max_negative_normal_mask = 0b111111;
160 
161  static constexpr uint8_t data_max_positive_subnormal_mask = 0b000111;
162  static constexpr uint8_t data_max_negative_subnormal_mask = 0b100111;
163 
164  static constexpr bool has_inf = false;
165  static constexpr bool has_nan = false;
166  static constexpr bool has_zero = true;
167 
169 };
170 
171 template <>
173 {
174  static constexpr int exp = 3;
175  static constexpr int mant = 2;
176  static constexpr int bias = 3;
177  static constexpr uint32_t sr_shift = 11;
178 
179  static constexpr int unbiased_exp_min = -2;
180  static constexpr int unbiased_exp_max = 4;
181  static constexpr int biased_exp_min = 1;
182  static constexpr int biased_exp_max = 7;
183 
184  static constexpr uint8_t positive_zero_mask = 0b000000;
185  static constexpr uint8_t negative_zero_mask = 0b100000;
186 
187  static constexpr uint8_t set_sign_mask = 0b011111;
188 
189  static constexpr uint8_t data_max_positive_normal_mask = 0b011111;
190  static constexpr uint8_t data_max_negative_normal_mask = 0b111111;
191 
192  static constexpr uint8_t data_max_positive_subnormal_mask = 0b000011;
193  static constexpr uint8_t data_max_negative_subnormal_mask = 0b100011;
194 
195  static constexpr bool has_inf = false;
196  static constexpr bool has_nan = false;
197  static constexpr bool has_zero = true;
198 
200 };
201 } // namespace ck
__host__ T exp(T x)
Definition: math_v2.hpp:391
Definition: ck.hpp:268
unsigned _BitInt(4) f4_t
Definition: data_type.hpp:33
_BitInt(6) f6_t
Definition: data_type.hpp:34
_Float16 half_t
Definition: data_type.hpp:31
ushort bhalf_t
Definition: data_type.hpp:30
unsigned _BitInt(6) bf6_t
Definition: data_type.hpp:35
unsigned short uint16_t
Definition: stdint.h:125
unsigned int uint32_t
Definition: stdint.h:126
unsigned char uint8_t
Definition: stdint.h:124
uint8_t bitwise_type
Definition: numeric_utils.hpp:199
uint8_t bitwise_type
Definition: numeric_utils.hpp:26
uint8_t bitwise_type
Definition: numeric_utils.hpp:137
uint8_t bitwise_type
Definition: numeric_utils.hpp:168
uint32_t bitwise_type
Definition: numeric_utils.hpp:45
uint16_t bitwise_type
Definition: numeric_utils.hpp:63
Definition: numeric_utils.hpp:10
Definition: amd_ck_fp8.hpp:49
Definition: amd_ck_fp8.hpp:369
Unsigned representation of a conventional biased Float32 exponent.
Definition: e8m0.hpp:26
Definition: amd_ck_fp8.hpp:36
Definition: amd_ck_fp8.hpp:323