Skip to content

[Bounty $1000] Convert is_dest_accum_en boolean template parameter to enum class #24109

@fvranicTT

Description

@fvranicTT

Overview

Convert the existing boolean template parameter is_dest_accum_en to a more type-safe and self-documenting enum class solution.

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

  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_math_binary_api.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_math_common_api.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_math_reduce_api.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_math_unary_datacopy_api.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_pack_api.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/llk_math_eltwise_unary_sfpu_recip.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_unpack_AB_api.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_unpack_AB_matmul_api.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_unpack_A_api.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_unpack_common_api.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_unpack_reduce_api.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_unpack_tilize_api.h
  • ./tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_unpack_untilize_api.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/common/inc/cpack_common.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/common/inc/cunpack_common.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/common/inc/sfpu/ckernel_sfpu_recip.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/llk_lib/llk_math_common.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/llk_lib/llk_math_eltwise_binary.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/llk_lib/llk_math_eltwise_unary_datacopy.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/llk_lib/llk_math_reduce.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/llk_lib/llk_pack.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/llk_lib/llk_pack_common.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/llk_lib/llk_unpack_A.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/llk_lib/llk_unpack_AB.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/llk_lib/llk_unpack_AB_matmul.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/llk_lib/llk_unpack_common.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/llk_lib/llk_unpack_reduce.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/llk_lib/llk_unpack_tilize.h
  • ./tt_metal/third_party/tt_llk_wormhole_b0/llk_lib/llk_unpack_untilize.h

BH:

  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_math_binary_api.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_math_common_api.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_math_reduce_api.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_math_unary_datacopy_api.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_pack_api.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/llk_math_eltwise_unary_sfpu_recip.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_unpack_AB_api.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_unpack_AB_matmul_api.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_unpack_A_api.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_unpack_common_api.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_unpack_reduce_api.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_unpack_tilize_api.h
  • ./tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_unpack_untilize_api.h
  • ./tt_metal/third_party/tt_llk_blackhole/common/inc/cpack_common.h
  • ./tt_metal/third_party/tt_llk_blackhole/common/inc/cunpack_common.h
  • ./tt_metal/third_party/tt_llk_blackhole/llk_lib/llk_math_common.h
  • ./tt_metal/third_party/tt_llk_blackhole/llk_lib/llk_math_eltwise_binary.h
  • ./tt_metal/third_party/tt_llk_blackhole/llk_lib/llk_math_eltwise_unary_datacopy.h
  • ./tt_metal/third_party/tt_llk_blackhole/llk_lib/llk_math_reduce.h
  • ./tt_metal/third_party/tt_llk_blackhole/llk_lib/llk_pack.h
  • ./tt_metal/third_party/tt_llk_blackhole/llk_lib/llk_pack_common.h
  • ./tt_metal/third_party/tt_llk_blackhole/llk_lib/llk_unpack_A.h
  • ./tt_metal/third_party/tt_llk_blackhole/llk_lib/llk_unpack_AB.h
  • ./tt_metal/third_party/tt_llk_blackhole/llk_lib/llk_unpack_AB_matmul.h
  • ./tt_metal/third_party/tt_llk_blackhole/llk_lib/llk_unpack_common.h
  • ./tt_metal/third_party/tt_llk_blackhole/llk_lib/llk_unpack_reduce.h
  • ./tt_metal/third_party/tt_llk_blackhole/llk_lib/llk_unpack_tilize.h
  • ./tt_metal/third_party/tt_llk_blackhole/llk_lib/llk_unpack_untilize.h

Current Implementation

Currently, the code uses a boolean template parameter is_dest_accum_en to control destination accumulation behavior.

Requested Change

Replace the boolean template parameter with an enum class:

enum class DestAccumulation { Disable, Enable };

Example:

template <PoolType type, ReduceDim dim, bool is_fp32_dest_acc_en, int MATH_FIDELITY_DESC = 0, bool is_int_fpu_en = false>
inline void _llk_math_reduce_(const uint dst_index, bool narrow_tile = false, const uint num_faces = 4)

is converted to:

template <PoolType type, ReduceDim dim, DestAccumulation fp32_dest_accumulation, int MATH_FIDELITY_DESC = 0, bool is_int_fpu_en = false>
inline void _llk_math_reduce_(const uint dst_index, bool narrow_tile = false, const uint num_faces = 4)

Requirements

  1. Replace all occurrences of is_dest_accum_en boolean template parameter with the new enum
  2. Update all template instantiations to use DestAccumulation::Enable or DestAccumulation::Disable
  3. Modify implementation to use the enum class instead of boolean checks
  4. Update any documentation or comments to reflect the new enum parameter
  5. Ensure all existing functionality works identically after conversion

Definition of Done

  1. All boolean template parameter usage of is_dest_accum_en converted to enum class and parameter is renamed to fp32_dest_accumulation
  2. All code compiles without errors or warnings
  3. All existing tests pass

Metadata

Metadata

Assignees

Type

No type

Projects

Status

PR Submitted 🕒

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions