/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 template <>
15 {
16  static constexpr int exp = 8;
17  static constexpr int mant = 0;
18  static constexpr int bias = 127;
19 
20  static constexpr int unbiased_exp_min = -127;
21  static constexpr int unbiased_exp_max = 127;
22  static constexpr int biased_exp_min = 0;
23  static constexpr int biased_exp_max = 254;
24 
26 };
27 
28 template <>
29 struct NumericUtils<float>
30 {
31  static constexpr int exp = 8;
32  static constexpr int mant = 23;
33  static constexpr int bias = 127;
34  static constexpr uint32_t nan_mask = 0x7F800000;
35  static constexpr uint32_t head_mask = 0xFF800000;
36  static constexpr uint32_t mant_mask = 0x7FFFFF;
37  static constexpr uint32_t exp_mask = 0xFF;
38  static constexpr uint32_t Inf = 0x7F800000;
39  static constexpr uint32_t NegInf = 0xFF800000;
40  static constexpr uint32_t NaN = 0x7F800001;
41  static constexpr uint32_t Neg0 = 0x80000000;
42  static constexpr bool has_inf = true;
44 };
45 
46 template <>
48 {
49  static constexpr int exp = 5;
50  static constexpr int mant = 10;
51  static constexpr int bias = 15;
52  static constexpr uint16_t nan_mask = 0x7C00;
53  static constexpr uint16_t head_mask = 0xFC00;
54  static constexpr uint16_t mant_mask = 0x3FF;
55  static constexpr uint16_t exp_mask = 0x1F;
56  static constexpr uint32_t Inf = 0x7C00;
57  static constexpr uint32_t NegInf = 0xFC00;
58  static constexpr uint32_t NaN = 0x7C01;
59  static constexpr uint32_t Neg0 = 0x8000;
60  static constexpr bool has_inf = true;
62 };
63 
64 template <>
66 {
67  static constexpr int exp = 8;
68  static constexpr int mant = 7;
69  static constexpr int bias = 128; // negative zero nan mode
70  // static constexpr int bias = 127; // ieee mode
71 };
72 
73 template <>
75 {
76  static constexpr int exp = 4;
77  static constexpr int mant = 3;
78  static constexpr int bias = 8; // negative zero nan mode
79  // static constexpr int bias = 7; // ieee mode
80  static constexpr bool has_inf = false;
81 };
82 
83 template <>
85 {
86  static constexpr int exp = 5;
87  static constexpr int mant = 2;
88  static constexpr int bias = 16; // negative zero nan mode
89  // static constexpr int bias = 15; // ieee mode
90  static constexpr bool has_inf = false;
91 };
92 template <>
94 {
95  static constexpr int exp = 4;
96  static constexpr int mant = 3;
97  static constexpr int bias = 7;
98 };
99 
100 template <>
102 {
103  static constexpr int exp = 5;
104  static constexpr int mant = 2;
105  static constexpr int bias = 15;
106 };
107 
108 template <>
110 {
111  static constexpr int exp = 2;
112  static constexpr int mant = 1;
113  static constexpr int bias = 1;
114  static constexpr uint32_t sr_shift = 10;
115 
116  static constexpr int unbiased_exp_min = 0;
117  static constexpr int unbiased_exp_max = 2;
118  static constexpr int biased_exp_min = 1;
119  static constexpr int biased_exp_max = 3;
120 
121  static constexpr uint8_t positive_zero_mask = 0b0000;
122  static constexpr uint8_t negative_zero_mask = 0b1000;
123 
124  static constexpr uint8_t one_mask = 0b0010;
125  static constexpr uint8_t set_sign_mask = 0b0111;
126 
127  static constexpr uint8_t data_max_positive_normal_mask = 0b0111;
128  static constexpr uint8_t data_max_negative_normal_mask = 0b1111;
129 
130  static constexpr uint8_t data_max_positive_subnormal_mask = 0b0001;
131  static constexpr uint8_t data_max_negative_subnormal_mask = 0b1001;
132 
133  static constexpr bool has_inf = false;
134 
136 };
137 
138 template <>
140 {
141  static constexpr int exp = 2;
142  static constexpr int mant = 3;
143  static constexpr int bias = 1;
144  static constexpr uint32_t sr_shift = 12;
145 
146  static constexpr int unbiased_exp_min = 0;
147  static constexpr int unbiased_exp_max = 2;
148  static constexpr int biased_exp_min = 1;
149  static constexpr int biased_exp_max = 3;
150 
151  static constexpr uint8_t positive_zero_mask = 0b000000;
152  static constexpr uint8_t negative_zero_mask = 0b100000;
153 
154  static constexpr uint8_t set_sign_mask = 0b011111;
155 
156  static constexpr uint8_t data_max_positive_normal_mask = 0b011111;
157  static constexpr uint8_t data_max_negative_normal_mask = 0b111111;
158 
159  static constexpr uint8_t data_max_positive_subnormal_mask = 0b000111;
160  static constexpr uint8_t data_max_negative_subnormal_mask = 0b100111;
161 
162  static constexpr bool has_inf = false;
163  static constexpr bool has_nan = false;
164  static constexpr bool has_zero = true;
165 
167 };
168 
169 template <>
171 {
172  static constexpr int exp = 3;
173  static constexpr int mant = 2;
174  static constexpr int bias = 3;
175  static constexpr uint32_t sr_shift = 11;
176 
177  static constexpr int unbiased_exp_min = -2;
178  static constexpr int unbiased_exp_max = 4;
179  static constexpr int biased_exp_min = 1;
180  static constexpr int biased_exp_max = 7;
181 
182  static constexpr uint8_t positive_zero_mask = 0b000000;
183  static constexpr uint8_t negative_zero_mask = 0b100000;
184 
185  static constexpr uint8_t set_sign_mask = 0b011111;
186 
187  static constexpr uint8_t data_max_positive_normal_mask = 0b011111;
188  static constexpr uint8_t data_max_negative_normal_mask = 0b111111;
189 
190  static constexpr uint8_t data_max_positive_subnormal_mask = 0b000011;
191  static constexpr uint8_t data_max_negative_subnormal_mask = 0b100011;
192 
193  static constexpr bool has_inf = false;
194  static constexpr bool has_nan = false;
195  static constexpr bool has_zero = true;
196 
198 };
199 } // namespace ck
__host__ T exp(T x)
Definition: math_v2.hpp:391
Definition: ck.hpp:267
unsigned _BitInt(4) f4_t
Definition: data_type.hpp:32
_BitInt(6) f6_t
Definition: data_type.hpp:33
_Float16 half_t
Definition: data_type.hpp:30
ushort bhalf_t
Definition: data_type.hpp:29
unsigned _BitInt(6) bf6_t
Definition: data_type.hpp:34
unsigned _BitInt(8) bf8_fnuz_t
Definition: amd_ck_fp8.hpp:37
_BitInt(8) f8_fnuz_t
Definition: amd_ck_fp8.hpp:36
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:197
uint8_t bitwise_type
Definition: numeric_utils.hpp:25
uint8_t bitwise_type
Definition: numeric_utils.hpp:135
uint8_t bitwise_type
Definition: numeric_utils.hpp:166
uint32_t bitwise_type
Definition: numeric_utils.hpp:43
uint16_t bitwise_type
Definition: numeric_utils.hpp:61
Definition: numeric_utils.hpp:10
Definition: amd_ck_fp8.hpp:344
Unsigned representation of a conventional biased Float32 exponent.
Definition: e8m0.hpp:25
Definition: amd_ck_fp8.hpp:298