/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 = 8;
52  static constexpr int mant = 10;
53  static constexpr int bias = 127;
54  static constexpr uint32_t nan_mask = 0x7F800000;
55  static constexpr uint32_t head_mask = 0xFF800000;
56  static constexpr uint32_t mant_mask = 0x7FFFFF;
57  static constexpr uint32_t exp_mask = 0xFF;
58  static constexpr uint32_t Inf = 0x7F800000;
59  static constexpr uint32_t NegInf = 0xFF800000;
60  static constexpr uint32_t NaN = 0x7F800001;
61  static constexpr uint32_t Neg0 = 0x80000000;
62  static constexpr bool has_inf = true;
64 };
65 
66 template <>
68 {
69  static constexpr int exp = 5;
70  static constexpr int mant = 10;
71  static constexpr int bias = 15;
72  static constexpr uint16_t nan_mask = 0x7C00;
73  static constexpr uint16_t head_mask = 0xFC00;
74  static constexpr uint16_t mant_mask = 0x3FF;
75  static constexpr uint16_t exp_mask = 0x1F;
76  static constexpr uint32_t Inf = 0x7C00;
77  static constexpr uint32_t NegInf = 0xFC00;
78  static constexpr uint32_t NaN = 0x7C01;
79  static constexpr uint32_t Neg0 = 0x8000;
80  static constexpr bool has_inf = true;
82 };
83 
84 template <>
86 {
87  static constexpr int exp = 8;
88  static constexpr int mant = 7;
89  static constexpr int bias = 128; // negative zero nan mode
90  // static constexpr int bias = 127; // ieee mode
91 };
92 
93 template <>
95 {
96  static constexpr int exp = 4;
97  static constexpr int mant = 3;
98  static constexpr int bias = 8; // negative zero nan mode
99  // static constexpr int bias = 7; // ieee mode
100  static constexpr bool has_inf = false;
101 };
102 
103 template <>
105 {
106  static constexpr int exp = 5;
107  static constexpr int mant = 2;
108  static constexpr int bias = 16; // negative zero nan mode
109  // static constexpr int bias = 15; // ieee mode
110  static constexpr bool has_inf = false;
111 };
112 template <>
114 {
115  static constexpr int exp = 4;
116  static constexpr int mant = 3;
117  static constexpr int bias = 7;
118 };
119 
120 template <>
122 {
123  static constexpr int exp = 5;
124  static constexpr int mant = 2;
125  static constexpr int bias = 15;
126 };
127 
128 template <>
130 {
131  static constexpr int exp = 2;
132  static constexpr int mant = 1;
133  static constexpr int bias = 1;
134  static constexpr uint32_t sr_shift = 10;
135 
136  static constexpr int unbiased_exp_min = 0;
137  static constexpr int unbiased_exp_max = 2;
138  static constexpr int biased_exp_min = 1;
139  static constexpr int biased_exp_max = 3;
140 
141  static constexpr uint8_t positive_zero_mask = 0b0000;
142  static constexpr uint8_t negative_zero_mask = 0b1000;
143 
144  static constexpr uint8_t one_mask = 0b0010;
145  static constexpr uint8_t set_sign_mask = 0b0111;
146 
147  static constexpr uint8_t data_max_positive_normal_mask = 0b0111;
148  static constexpr uint8_t data_max_negative_normal_mask = 0b1111;
149 
150  static constexpr uint8_t data_max_positive_subnormal_mask = 0b0001;
151  static constexpr uint8_t data_max_negative_subnormal_mask = 0b1001;
152 
153  static constexpr bool has_inf = false;
154 
156 };
157 
158 template <>
160 {
161  static constexpr int exp = 2;
162  static constexpr int mant = 3;
163  static constexpr int bias = 1;
164  static constexpr uint32_t sr_shift = 12;
165 
166  static constexpr int unbiased_exp_min = 0;
167  static constexpr int unbiased_exp_max = 2;
168  static constexpr int biased_exp_min = 1;
169  static constexpr int biased_exp_max = 3;
170 
171  static constexpr uint8_t positive_zero_mask = 0b000000;
172  static constexpr uint8_t negative_zero_mask = 0b100000;
173 
174  static constexpr uint8_t set_sign_mask = 0b011111;
175 
176  static constexpr uint8_t data_max_positive_normal_mask = 0b011111;
177  static constexpr uint8_t data_max_negative_normal_mask = 0b111111;
178 
179  static constexpr uint8_t data_max_positive_subnormal_mask = 0b000111;
180  static constexpr uint8_t data_max_negative_subnormal_mask = 0b100111;
181 
182  static constexpr bool has_inf = false;
183  static constexpr bool has_nan = false;
184  static constexpr bool has_zero = true;
185 
187 };
188 
189 template <>
191 {
192  static constexpr int exp = 3;
193  static constexpr int mant = 2;
194  static constexpr int bias = 3;
195  static constexpr uint32_t sr_shift = 11;
196 
197  static constexpr int unbiased_exp_min = -2;
198  static constexpr int unbiased_exp_max = 4;
199  static constexpr int biased_exp_min = 1;
200  static constexpr int biased_exp_max = 7;
201 
202  static constexpr uint8_t positive_zero_mask = 0b000000;
203  static constexpr uint8_t negative_zero_mask = 0b100000;
204 
205  static constexpr uint8_t set_sign_mask = 0b011111;
206 
207  static constexpr uint8_t data_max_positive_normal_mask = 0b011111;
208  static constexpr uint8_t data_max_negative_normal_mask = 0b111111;
209 
210  static constexpr uint8_t data_max_positive_subnormal_mask = 0b000011;
211  static constexpr uint8_t data_max_negative_subnormal_mask = 0b100011;
212 
213  static constexpr bool has_inf = false;
214  static constexpr bool has_nan = false;
215  static constexpr bool has_zero = true;
216 
218 };
219 } // 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
_BitInt(19) tf32_t
Definition: data_type.hpp:29
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:217
uint32_t bitwise_type
Definition: numeric_utils.hpp:63
uint8_t bitwise_type
Definition: numeric_utils.hpp:26
uint8_t bitwise_type
Definition: numeric_utils.hpp:155
uint8_t bitwise_type
Definition: numeric_utils.hpp:186
uint32_t bitwise_type
Definition: numeric_utils.hpp:45
uint16_t bitwise_type
Definition: numeric_utils.hpp:81
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