Commit ecd638f3 authored by Rostyslav Geyyer's avatar Rostyslav Geyyer
Browse files

Fix nan logic

parent 7c5c2c8a
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
// Copyright (c) 2024, Advanced Micro Devices, Inc. All rights reserved. // Copyright (c) 2024-2025, Advanced Micro Devices, Inc. All rights reserved.
#pragma once #pragma once
...@@ -13,7 +13,7 @@ __host__ __device__ inline bool is_nan<f4_t>(e8m0_bexp_t const scale, ...@@ -13,7 +13,7 @@ __host__ __device__ inline bool is_nan<f4_t>(e8m0_bexp_t const scale,
f4_t const dataBytes [[maybe_unused]]) f4_t const dataBytes [[maybe_unused]])
{ {
// no need to check for data as it does not have NaN representation // no need to check for data as it does not have NaN representation
return scale == NumericLimits<e8m0_bexp_t>::QuietNaN(); return scale.is_nan();
} }
// no infinity representation in ocp_e2m1_mxfp4 will always return false // no infinity representation in ocp_e2m1_mxfp4 will always return false
...@@ -26,11 +26,9 @@ __host__ __device__ inline bool is_inf<f4_t>(e8m0_bexp_t const scale [[maybe_unu ...@@ -26,11 +26,9 @@ __host__ __device__ inline bool is_inf<f4_t>(e8m0_bexp_t const scale [[maybe_unu
} }
template <> template <>
__host__ __device__ inline bool is_zero<f4_t>(e8m0_bexp_t const scale, f4_t const data) __host__ __device__ inline bool is_zero<f4_t>(e8m0_bexp_t const scale [[maybe_unused]],
f4_t const data)
{ {
if(is_nan<f4_t>(scale, data))
return false;
// no need to check for scale as it does not have a 0 representation // no need to check for scale as it does not have a 0 representation
f4_t result = (data & 0b00001111) & NumericUtils<f4_t>::set_sign_mask; f4_t result = (data & 0b00001111) & NumericUtils<f4_t>::set_sign_mask;
...@@ -41,7 +39,9 @@ template <> ...@@ -41,7 +39,9 @@ template <>
__host__ __device__ inline float to_float<f4_t>(e8m0_bexp_t const scale, f4_t const data) __host__ __device__ inline float to_float<f4_t>(e8m0_bexp_t const scale, f4_t const data)
{ {
if(is_nan<f4_t>(scale, data)) if(is_nan<f4_t>(scale, data))
{
return std::numeric_limits<float>::quiet_NaN(); return std::numeric_limits<float>::quiet_NaN();
}
if(is_zero<f4_t>(scale, data)) if(is_zero<f4_t>(scale, data))
return 0.0f; return 0.0f;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment