/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 // Copyright (c) Advanced Micro Devices, Inc., or its affiliates.
2 // SPDX-License-Identifier: MIT
3 
4 #pragma once
6 
7 namespace ck {
8 
9 template <typename T>
11 {
12 };
13 
14 #ifndef CK_CODE_GEN_RTC
15 template <>
17 {
18  static constexpr int exp = 8;
19  static constexpr int mant = 0;
20  static constexpr int bias = 127;
21 
22  static constexpr int unbiased_exp_min = -127;
23  static constexpr int unbiased_exp_max = 127;
24  static constexpr int biased_exp_min = 0;
25  static constexpr int biased_exp_max = 254;
26 
28 };
29 #endif
30 
31 template <>
32 struct NumericUtils<float>
33 {
34  static constexpr int exp = 8;
35  static constexpr int mant = 23;
36  static constexpr int bias = 127;
37  static constexpr uint32_t nan_mask = 0x7F800000;
38  static constexpr uint32_t head_mask = 0xFF800000;
39  static constexpr uint32_t mant_mask = 0x7FFFFF;
40  static constexpr uint32_t exp_mask = 0xFF;
41  static constexpr uint32_t Inf = 0x7F800000;
42  static constexpr uint32_t NegInf = 0xFF800000;
43  static constexpr uint32_t NaN = 0x7F800001;
44  static constexpr uint32_t Neg0 = 0x80000000;
45  static constexpr bool has_inf = true;
47 };
48 
49 template <>
51 {
52  static constexpr int exp = 8;
53  static constexpr int mant = 10;
54  static constexpr int bias = 127;
55  static constexpr uint32_t nan_mask = 0x7F800000;
56  static constexpr uint32_t head_mask = 0xFF800000;
57  static constexpr uint32_t mant_mask = 0x7FFFFF;
58  static constexpr uint32_t exp_mask = 0xFF;
59  static constexpr uint32_t Inf = 0x7F800000;
60  static constexpr uint32_t NegInf = 0xFF800000;
61  static constexpr uint32_t NaN = 0x7F800001;
62  static constexpr uint32_t Neg0 = 0x80000000;
63  static constexpr bool has_inf = true;
65 };
66 
67 template <>
69 {
70  static constexpr int exp = 5;
71  static constexpr int mant = 10;
72  static constexpr int bias = 15;
73  static constexpr uint16_t nan_mask = 0x7C00;
74  static constexpr uint16_t head_mask = 0xFC00;
75  static constexpr uint16_t mant_mask = 0x3FF;
76  static constexpr uint16_t exp_mask = 0x1F;
77  static constexpr uint32_t Inf = 0x7C00;
78  static constexpr uint32_t NegInf = 0xFC00;
79  static constexpr uint32_t NaN = 0x7C01;
80  static constexpr uint32_t Neg0 = 0x8000;
81  static constexpr bool has_inf = true;
83 };
84 
85 template <>
87 {
88  static constexpr int exp = 8;
89  static constexpr int mant = 7;
90  static constexpr int bias = 128; // negative zero nan mode
91  // static constexpr int bias = 127; // ieee mode
92 };
93 
94 template <>
96 {
97  static constexpr int exp = 4;
98  static constexpr int mant = 3;
99  static constexpr int bias = 8; // negative zero nan mode
100  // static constexpr int bias = 7; // ieee mode
101  static constexpr bool has_inf = false;
102 };
103 
104 template <>
106 {
107  static constexpr int exp = 5;
108  static constexpr int mant = 2;
109  static constexpr int bias = 16; // negative zero nan mode
110  // static constexpr int bias = 15; // ieee mode
111  static constexpr bool has_inf = false;
112 };
113 template <>
115 {
116  static constexpr int exp = 4;
117  static constexpr int mant = 3;
118  static constexpr int bias = 7;
119 };
120 
121 template <>
123 {
124  static constexpr int exp = 5;
125  static constexpr int mant = 2;
126  static constexpr int bias = 15;
127 };
128 
129 template <>
131 {
132  static constexpr int exp = 2;
133  static constexpr int mant = 1;
134  static constexpr int bias = 1;
135  static constexpr uint32_t sr_shift = 10;
136 
137  static constexpr int unbiased_exp_min = 0;
138  static constexpr int unbiased_exp_max = 2;
139  static constexpr int biased_exp_min = 1;
140  static constexpr int biased_exp_max = 3;
141 
142  static constexpr uint8_t positive_zero_mask = 0b0000;
143  static constexpr uint8_t negative_zero_mask = 0b1000;
144 
145  static constexpr uint8_t one_mask = 0b0010;
146  static constexpr uint8_t set_sign_mask = 0b0111;
147 
148  static constexpr uint8_t data_max_positive_normal_mask = 0b0111;
149  static constexpr uint8_t data_max_negative_normal_mask = 0b1111;
150 
151  static constexpr uint8_t data_max_positive_subnormal_mask = 0b0001;
152  static constexpr uint8_t data_max_negative_subnormal_mask = 0b1001;
153 
154  static constexpr bool has_inf = false;
155 
157 };
158 
159 template <>
161 {
162  static constexpr int exp = 2;
163  static constexpr int mant = 3;
164  static constexpr int bias = 1;
165  static constexpr uint32_t sr_shift = 12;
166 
167  static constexpr int unbiased_exp_min = 0;
168  static constexpr int unbiased_exp_max = 2;
169  static constexpr int biased_exp_min = 1;
170  static constexpr int biased_exp_max = 3;
171 
172  static constexpr uint8_t positive_zero_mask = 0b000000;
173  static constexpr uint8_t negative_zero_mask = 0b100000;
174 
175  static constexpr uint8_t set_sign_mask = 0b011111;
176 
177  static constexpr uint8_t data_max_positive_normal_mask = 0b011111;
178  static constexpr uint8_t data_max_negative_normal_mask = 0b111111;
179 
180  static constexpr uint8_t data_max_positive_subnormal_mask = 0b000111;
181  static constexpr uint8_t data_max_negative_subnormal_mask = 0b100111;
182 
183  static constexpr bool has_inf = false;
184  static constexpr bool has_nan = false;
185  static constexpr bool has_zero = true;
186 
188 };
189 
190 template <>
192 {
193  static constexpr int exp = 3;
194  static constexpr int mant = 2;
195  static constexpr int bias = 3;
196  static constexpr uint32_t sr_shift = 11;
197 
198  static constexpr int unbiased_exp_min = -2;
199  static constexpr int unbiased_exp_max = 4;
200  static constexpr int biased_exp_min = 1;
201  static constexpr int biased_exp_max = 7;
202 
203  static constexpr uint8_t positive_zero_mask = 0b000000;
204  static constexpr uint8_t negative_zero_mask = 0b100000;
205 
206  static constexpr uint8_t set_sign_mask = 0b011111;
207 
208  static constexpr uint8_t data_max_positive_normal_mask = 0b011111;
209  static constexpr uint8_t data_max_negative_normal_mask = 0b111111;
210 
211  static constexpr uint8_t data_max_positive_subnormal_mask = 0b000011;
212  static constexpr uint8_t data_max_negative_subnormal_mask = 0b100011;
213 
214  static constexpr bool has_inf = false;
215  static constexpr bool has_nan = false;
216  static constexpr bool has_zero = true;
217 
219 };
220 } // namespace ck
__host__ T exp(T x)
Definition: math_v2.hpp:391
Definition: ck.hpp:270
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:218
uint32_t bitwise_type
Definition: numeric_utils.hpp:64
uint8_t bitwise_type
Definition: numeric_utils.hpp:27
uint8_t bitwise_type
Definition: numeric_utils.hpp:156
uint8_t bitwise_type
Definition: numeric_utils.hpp:187
uint32_t bitwise_type
Definition: numeric_utils.hpp:46
uint16_t bitwise_type
Definition: numeric_utils.hpp:82
Definition: numeric_utils.hpp:11
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