mxf4_utils.hpp Source File

mxf4_utils.hpp Source File#

Composable Kernel: mxf4_utils.hpp Source File
mxf4_utils.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2024-2025, Advanced Micro Devices, Inc. All rights reserved.
3
4#ifndef CK_CODE_GEN_RTC
5#pragma once
6
9
10namespace ck::utils {
11
12template <>
13__host__ __device__ inline bool is_nan<f4_t>(e8m0_bexp_t const scale,
14 f4_t const dataBytes [[maybe_unused]])
15{
16 // no need to check for data as it does not have NaN representation
17 return scale.is_nan();
18}
19
20// no infinity representation in ocp_e2m1_mxfp4 will always return false
21template <>
22__host__ __device__ inline bool is_inf<f4_t>(e8m0_bexp_t const scale [[maybe_unused]],
23 f4_t const data [[maybe_unused]])
24{
25 // no inf representation for ocp_e2m1_mxfp4
26 return false;
27}
28
29template <>
30__host__ __device__ inline bool is_zero<f4_t>(e8m0_bexp_t const scale [[maybe_unused]],
31 f4_t const data)
32{
33 // no need to check for scale as it does not have a 0 representation
34 f4_t result = (data & 0b00001111) & NumericUtils<f4_t>::set_sign_mask;
35
36 return result == 0b0;
37}
38
39template <>
40__host__ __device__ inline float to_float<f4_t>(e8m0_bexp_t const scale, f4_t const data)
41{
42 if(is_nan<f4_t>(scale, data))
44
45 if(is_zero<f4_t>(scale, data))
46 return 0.0f;
47
48 f4_t prepared_data = data & 0b00001111;
49
50 int scale_exp = get_exponent_value<e8m0_bexp_t>(scale);
51
52 return convert_to_float<f4_t>(prepared_data, scale_exp);
53}
54
55template <>
82
83template <>
107} // namespace ck::utils
108#endif
Definition library/utility/check_err.hpp:24
__host__ __device__ float convert_to_float(T data, int scale_exp)
Definition mxfp_utils.hpp:73
__host__ __device__ f4_t sat_convert_to_type_sr< f4_t >(float value, uint32_t seed)
Definition mxf4_utils.hpp:84
__host__ __device__ T convert_to_type_sr(float value, uint32_t seed)
Definition mxfp_utils.hpp:261
__host__ __device__ bool is_zero(e8m0_bexp_t const scale, T const data)
__host__ __device__ T convert_to_type(float value)
Definition mxfp_utils.hpp:102
__host__ __device__ bool is_nan< f4_t >(e8m0_bexp_t const scale, f4_t const dataBytes)
Definition mxf4_utils.hpp:13
__host__ __device__ bool is_zero< f4_t >(e8m0_bexp_t const scale, f4_t const data)
Definition mxf4_utils.hpp:30
__host__ __device__ bool is_nan(e8m0_bexp_t const scale, T const data)
__host__ __device__ float to_float< f4_t >(e8m0_bexp_t const scale, f4_t const data)
Definition mxf4_utils.hpp:40
__host__ __device__ float to_float(e8m0_bexp_t const scale, T const data)
__host__ __device__ bool is_inf< f4_t >(e8m0_bexp_t const scale, f4_t const data)
Definition mxf4_utils.hpp:22
__host__ __device__ constexpr int32_t get_exponent_value< e8m0_bexp_t >(e8m0_bexp_t x)
Definition utility/e8m0.hpp:74
__host__ __device__ f4_t sat_convert_to_type< f4_t >(float value)
Definition mxf4_utils.hpp:56
unsigned _BitInt(4) f4_t
Definition data_type.hpp:33
const GenericPointer< typename T::ValueType > T2 value
Definition pointer.h:1697
unsigned int uint32_t
Definition stdint.h:126
Definition numeric_limits.hpp:309
__host__ static __device__ constexpr T QuietNaN()
Definition numeric_limits.hpp:313
Definition numeric_utils.hpp:10
Unsigned representation of a conventional biased Float32 exponent.
Definition utility/e8m0.hpp:26
__host__ __device__ constexpr bool is_nan() const
Definition utility/e8m0.hpp:65
Definition mxfp_utils.hpp:14
float value_float
Definition mxfp_utils.hpp:15
uint32_t value_bitwise
Definition mxfp_utils.hpp:16