numeric_utils.hpp Source File

numeric_utils.hpp Source File#

Composable Kernel: 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
6namespace ck {
7
8template <typename T>
10{
11};
12
13#ifndef CK_CODE_GEN_RTC
14template <>
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
30template <>
31struct 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
48template <>
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
66template <>
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
84template <>
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
93template <>
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
103template <>
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};
112template <>
114{
115 static constexpr int exp = 4;
116 static constexpr int mant = 3;
117 static constexpr int bias = 7;
118};
119
120template <>
122{
123 static constexpr int exp = 5;
124 static constexpr int mant = 2;
125 static constexpr int bias = 15;
126};
127
128template <>
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
158template <>
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
189template <>
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
Definition ck.hpp:268
ushort bhalf_t
Definition data_type.hpp:30
_Float16 half_t
Definition data_type.hpp:31
unsigned _BitInt(4) f4_t
Definition data_type.hpp:33
_BitInt(6) f6_t
Definition data_type.hpp:34
unsigned _BitInt(6) bf6_t
Definition data_type.hpp:35
_BitInt(19) tf32_t
Definition data_type.hpp:29
unsigned short uint16_t
Definition stdint.h:125
unsigned int uint32_t
Definition stdint.h:126
unsigned char uint8_t
Definition stdint.h:124
static constexpr uint8_t positive_zero_mask
Definition numeric_utils.hpp:202
static constexpr bool has_zero
Definition numeric_utils.hpp:215
static constexpr int unbiased_exp_min
Definition numeric_utils.hpp:197
static constexpr uint8_t set_sign_mask
Definition numeric_utils.hpp:205
static constexpr bool has_inf
Definition numeric_utils.hpp:213
static constexpr uint8_t data_max_positive_normal_mask
Definition numeric_utils.hpp:207
static constexpr uint8_t negative_zero_mask
Definition numeric_utils.hpp:203
static constexpr uint8_t data_max_positive_subnormal_mask
Definition numeric_utils.hpp:210
static constexpr int mant
Definition numeric_utils.hpp:193
static constexpr uint32_t sr_shift
Definition numeric_utils.hpp:195
static constexpr uint8_t data_max_negative_normal_mask
Definition numeric_utils.hpp:208
static constexpr int exp
Definition numeric_utils.hpp:192
static constexpr int biased_exp_max
Definition numeric_utils.hpp:200
static constexpr uint8_t data_max_negative_subnormal_mask
Definition numeric_utils.hpp:211
static constexpr int unbiased_exp_max
Definition numeric_utils.hpp:198
static constexpr int bias
Definition numeric_utils.hpp:194
static constexpr bool has_nan
Definition numeric_utils.hpp:214
uint8_t bitwise_type
Definition numeric_utils.hpp:217
static constexpr int biased_exp_min
Definition numeric_utils.hpp:199
static constexpr int bias
Definition numeric_utils.hpp:108
static constexpr int mant
Definition numeric_utils.hpp:107
static constexpr bool has_inf
Definition numeric_utils.hpp:110
static constexpr int exp
Definition numeric_utils.hpp:106
static constexpr int bias
Definition numeric_utils.hpp:125
static constexpr int exp
Definition numeric_utils.hpp:123
static constexpr int mant
Definition numeric_utils.hpp:124
static constexpr int exp
Definition numeric_utils.hpp:87
static constexpr int mant
Definition numeric_utils.hpp:88
static constexpr int bias
Definition numeric_utils.hpp:89
static constexpr uint32_t Neg0
Definition numeric_utils.hpp:61
static constexpr uint32_t Inf
Definition numeric_utils.hpp:58
static constexpr uint32_t head_mask
Definition numeric_utils.hpp:55
static constexpr uint32_t exp_mask
Definition numeric_utils.hpp:57
static constexpr uint32_t nan_mask
Definition numeric_utils.hpp:54
static constexpr int exp
Definition numeric_utils.hpp:51
static constexpr int bias
Definition numeric_utils.hpp:53
uint32_t bitwise_type
Definition numeric_utils.hpp:63
static constexpr uint32_t NegInf
Definition numeric_utils.hpp:59
static constexpr int mant
Definition numeric_utils.hpp:52
static constexpr bool has_inf
Definition numeric_utils.hpp:62
static constexpr uint32_t mant_mask
Definition numeric_utils.hpp:56
static constexpr uint32_t NaN
Definition numeric_utils.hpp:60
static constexpr int biased_exp_max
Definition numeric_utils.hpp:24
static constexpr int unbiased_exp_max
Definition numeric_utils.hpp:22
static constexpr int bias
Definition numeric_utils.hpp:19
uint8_t bitwise_type
Definition numeric_utils.hpp:26
static constexpr int exp
Definition numeric_utils.hpp:17
static constexpr int mant
Definition numeric_utils.hpp:18
static constexpr int unbiased_exp_min
Definition numeric_utils.hpp:21
static constexpr int biased_exp_min
Definition numeric_utils.hpp:23
static constexpr uint8_t data_max_positive_subnormal_mask
Definition numeric_utils.hpp:150
static constexpr uint8_t one_mask
Definition numeric_utils.hpp:144
static constexpr int bias
Definition numeric_utils.hpp:133
uint8_t bitwise_type
Definition numeric_utils.hpp:155
static constexpr uint8_t data_max_negative_subnormal_mask
Definition numeric_utils.hpp:151
static constexpr int biased_exp_min
Definition numeric_utils.hpp:138
static constexpr int exp
Definition numeric_utils.hpp:131
static constexpr uint8_t data_max_negative_normal_mask
Definition numeric_utils.hpp:148
static constexpr uint8_t negative_zero_mask
Definition numeric_utils.hpp:142
static constexpr int unbiased_exp_min
Definition numeric_utils.hpp:136
static constexpr bool has_inf
Definition numeric_utils.hpp:153
static constexpr int mant
Definition numeric_utils.hpp:132
static constexpr uint8_t set_sign_mask
Definition numeric_utils.hpp:145
static constexpr int biased_exp_max
Definition numeric_utils.hpp:139
static constexpr uint32_t sr_shift
Definition numeric_utils.hpp:134
static constexpr int unbiased_exp_max
Definition numeric_utils.hpp:137
static constexpr uint8_t data_max_positive_normal_mask
Definition numeric_utils.hpp:147
static constexpr uint8_t positive_zero_mask
Definition numeric_utils.hpp:141
static constexpr bool has_inf
Definition numeric_utils.hpp:182
static constexpr bool has_nan
Definition numeric_utils.hpp:183
static constexpr int mant
Definition numeric_utils.hpp:162
static constexpr int exp
Definition numeric_utils.hpp:161
static constexpr int biased_exp_min
Definition numeric_utils.hpp:168
static constexpr uint8_t data_max_negative_subnormal_mask
Definition numeric_utils.hpp:180
static constexpr uint32_t sr_shift
Definition numeric_utils.hpp:164
static constexpr uint8_t set_sign_mask
Definition numeric_utils.hpp:174
static constexpr uint8_t data_max_negative_normal_mask
Definition numeric_utils.hpp:177
static constexpr int unbiased_exp_max
Definition numeric_utils.hpp:167
static constexpr uint8_t data_max_positive_subnormal_mask
Definition numeric_utils.hpp:179
static constexpr int biased_exp_max
Definition numeric_utils.hpp:169
static constexpr uint8_t data_max_positive_normal_mask
Definition numeric_utils.hpp:176
static constexpr int unbiased_exp_min
Definition numeric_utils.hpp:166
static constexpr int bias
Definition numeric_utils.hpp:163
static constexpr uint8_t positive_zero_mask
Definition numeric_utils.hpp:171
uint8_t bitwise_type
Definition numeric_utils.hpp:186
static constexpr bool has_zero
Definition numeric_utils.hpp:184
static constexpr uint8_t negative_zero_mask
Definition numeric_utils.hpp:172
static constexpr bool has_inf
Definition numeric_utils.hpp:100
static constexpr int exp
Definition numeric_utils.hpp:96
static constexpr int bias
Definition numeric_utils.hpp:98
static constexpr int mant
Definition numeric_utils.hpp:97
static constexpr int exp
Definition numeric_utils.hpp:115
static constexpr int mant
Definition numeric_utils.hpp:116
static constexpr int bias
Definition numeric_utils.hpp:117
static constexpr int exp
Definition numeric_utils.hpp:33
static constexpr uint32_t NaN
Definition numeric_utils.hpp:42
static constexpr uint32_t head_mask
Definition numeric_utils.hpp:37
static constexpr uint32_t NegInf
Definition numeric_utils.hpp:41
static constexpr uint32_t Inf
Definition numeric_utils.hpp:40
static constexpr int bias
Definition numeric_utils.hpp:35
static constexpr uint32_t Neg0
Definition numeric_utils.hpp:43
static constexpr uint32_t nan_mask
Definition numeric_utils.hpp:36
static constexpr uint32_t exp_mask
Definition numeric_utils.hpp:39
static constexpr uint32_t mant_mask
Definition numeric_utils.hpp:38
static constexpr int mant
Definition numeric_utils.hpp:34
static constexpr bool has_inf
Definition numeric_utils.hpp:44
uint32_t bitwise_type
Definition numeric_utils.hpp:45
static constexpr uint16_t head_mask
Definition numeric_utils.hpp:73
static constexpr int exp
Definition numeric_utils.hpp:69
static constexpr uint16_t mant_mask
Definition numeric_utils.hpp:74
static constexpr int mant
Definition numeric_utils.hpp:70
static constexpr int bias
Definition numeric_utils.hpp:71
uint16_t bitwise_type
Definition numeric_utils.hpp:81
static constexpr uint16_t nan_mask
Definition numeric_utils.hpp:72
static constexpr uint16_t exp_mask
Definition numeric_utils.hpp:75
static constexpr uint32_t Neg0
Definition numeric_utils.hpp:79
static constexpr bool has_inf
Definition numeric_utils.hpp:80
static constexpr uint32_t NegInf
Definition numeric_utils.hpp:77
static constexpr uint32_t NaN
Definition numeric_utils.hpp:78
static constexpr uint32_t Inf
Definition numeric_utils.hpp:76
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 utility/e8m0.hpp:26
Definition amd_ck_fp8.hpp:36
Definition amd_ck_fp8.hpp:323