Skip to content

[Bounty $1000] Convert APPROXIMATION_MODE boolean template parameters to ApproximationMode enum class #25173

@fvranicTT

Description

@fvranicTT

Overview

Convert the existing boolean template parameter APPROXIMATION_MODE and APPROX_MODE to a more type-safe and self-documenting enum class solution for better code readability and maintainability.

A list of files that contain this parameter (might not be complete):

WH:

  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_gelu.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_bitwise_and.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_bitwise_or.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_dropout.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_erfinv.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_abs.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_relu.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_tiled_prod.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_erf_erfc.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_square.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_copy_dest_values.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_softplus.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_fill.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_sqrt.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_hardtanh.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_cumsum.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_topk.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_sigmoid.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_remainder.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_mask.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_tanh.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_add1.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_binary.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_tanh_derivative.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_shift.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_reverseops.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_heaviside.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_cast_fp32_to_fp16a.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_right_shift.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_alt_complex_rotate90.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_fmod.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_bitwise_not.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_min.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_i0.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_rand.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_int_sum.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_quant.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_expm1.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_prelu.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_signbit.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_recip.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_exp.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_rsqrt.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_comp.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_trigonometry.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_isinf_isnan.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_binop_with_unary.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_binary_bitwise.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_left_shift.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_i1.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_typecast.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_exp2.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_unary_comp.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_sign.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_unary_max_min.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_max.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_power_iterative.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_identity.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_log1p.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_negative.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_bitwise_xor.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_elu.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_reshuffle_rows.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_log.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_clamp.h
  • ./tt_llk_wormhole_b0/llk_lib/llk_math_eltwise_unary_sfpu_params.h
  • ./tt_llk_wormhole_b0/llk_lib/llk_math_eltwise_binary_sfpu_params.h
  • ./tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_abs.h
  • ./tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_activations.h
  • ./tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_cumsum.h
  • ./tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_elu.h
  • ./tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_exp.h
  • ./tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_exp2.h
  • ./tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_gelu.h
  • ./tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_rounding_ops.h
  • ./tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_sigmoid.h
  • ./tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_silu.h
  • ./tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_sqrt.h
  • ./tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_tanh_derivative.h
  • ./tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_topk.h
  • ./tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_trigonometry.h

BH:

  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_gelu.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_bitwise_and.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_bitwise_or.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_dropout.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_erfinv.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_abs.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_relu.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_tiled_prod.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_erf_erfc.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_square.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_copy_dest_values.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_softplus.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_fill.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_sqrt.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_hardtanh.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_cumsum.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_topk.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_sigmoid.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_remainder.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_mask.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_tanh.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_add1.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_binary.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_tanh_derivative.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_shift.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_reverseops.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_heaviside.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_cast_fp32_to_fp16a.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_right_shift.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_alt_complex_rotate90.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_fmod.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_bitwise_not.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_min.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_i0.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_rand.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_int_sum.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_quant.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_expm1.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_prelu.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_signbit.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_recip.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_exp.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_rsqrt.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_comp.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_trigonometry.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_isinf_isnan.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_binop_with_unary.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_binary_bitwise.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_left_shift.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_i1.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_typecast.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_exp2.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_unary_comp.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_sign.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_unary_max_min.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_max.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_power_iterative.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_identity.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_log1p.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_negative.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_bitwise_xor.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_elu.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_log.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_clamp.h
  • ./tt_llk_blackhole/llk_lib/llk_math_eltwise_unary_sfpu_params.h
  • ./tt_llk_blackhole/llk_lib/llk_math_eltwise_binary_sfpu_params.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_activations.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_add_int.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_binary.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_binary_bitwise.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_comp.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_cumsum.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_elu.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_exp.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_exp2.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_fill.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_gelu.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_hardtanh.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_max_int32.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_power.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_relu.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_reshuffle_rows.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_rounding_ops.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_shift.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_sigmoid.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_sign.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_silu.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_sqrt.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_square.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_sub_int.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_tanh_derivative.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_topk.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_trigonometry.h
  • ./tt_llk_blackhole/common/inc/sfpu/ckernel_sfpu_typecast.h

Current Implementation

Currently, the code uses a boolean template parameter APPROXIMATION_MODE or APPROX_MODE to control whether SFPU operations use fast approximations (true) or precise calculations (false). This leads to unclear function calls where the intent is not immediately obvious.

Example of current unclear usage:

// Hard to understand what 'true' means without context
_calculate_exponential_<true, false, 8, false, true>(exp_base_scale_factor);

// Template definition is not self-documenting
template <bool APPROXIMATION_MODE, bool SCALE_EN, int ITERATIONS, bool FAST_APPROX, bool SKIP_POSITIVE_CHECK>
void _calculate_exponential_(const uint16_t exp_base_scale_factor)
{
    if constexpr (APPROXIMATION_MODE) {
        // Fast approximation path
    } else {
        // Precise calculation path
    }
}

Requested Change

Replace the boolean template parameter with an enum class:

enum class ApproximationMode 
{ 
    Precise = 0, // High precision, slower (false equivalent)
    Fast    = 1  // Fast approximation, less accurate (true equivalent)
};

Example transformation:

// BEFORE
template <bool APPROXIMATION_MODE, bool SCALE_EN, int ITERATIONS, bool FAST_APPROX, bool SKIP_POSITIVE_CHECK>
void _calculate_exponential_(const uint16_t exp_base_scale_factor)
{
    if constexpr (APPROXIMATION_MODE) {
        // Fast approximation path
    }
}

// AFTER  
template <ApproximationMode APPROX_MODE, bool SCALE_EN, int ITERATIONS, bool FAST_APPROX, bool SKIP_POSITIVE_CHECK>
void _calculate_exponential_(const uint16_t exp_base_scale_factor)
{
    if constexpr (APPROX_MODE == ApproximationMode::Fast) {
        // Fast approximation path
    }
}

// Function calls become self-documenting
_calculate_exponential_<ApproximationMode::Fast, false, 8, false, true>(exp_base_scale_factor);

Requirements

  1. Add ApproximationMode enum class definition to both tt_llk_blackhole/llk_lib/llk_defs.h and tt_llk_wormhole_b0/llk_lib/llk_defs.h
  2. Replace all occurrences of bool APPROXIMATION_MODE and bool APPROX_MODE template parameters with ApproximationMode APPROX_MODE
  3. Update all template instantiations to use ApproximationMode::Fast or ApproximationMode::Precise
  4. Modify conditional statements from if constexpr (APPROXIMATION_MODE) to if constexpr (APPROX_MODE == ApproximationMode::Fast)
  5. Add #include "llk_defs.h" to files that need the enum definition
  6. Update any documentation or comments to reflect the new enum parameter
  7. Ensure all existing functionality works identically after conversion

Definition of Done

  1. All boolean template parameter usage of APPROXIMATION_MODE/APPROX_MODE converted to ApproximationMode enum class
  2. Parameter names standardized to APPROX_MODE across all files
  3. All conditional logic updated to use explicit enum comparisons
  4. All code compiles without errors or warnings
  5. All existing tests pass
  6. Function calls are self-documenting with clear approximation mode intent

Metadata

Metadata

Assignees

Type

No type

Projects

Status

PR Submitted 🕒

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions