diff --git a/tests/sweep_framework/sweeps/eltwise/unary/prelu/prelu.py b/tests/sweep_framework/sweeps/eltwise/unary/prelu/prelu.py index b2940fcf8170..85dcf2fd4b4d 100644 --- a/tests/sweep_framework/sweeps/eltwise/unary/prelu/prelu.py +++ b/tests/sweep_framework/sweeps/eltwise/unary/prelu/prelu.py @@ -6,7 +6,6 @@ from functools import partial import torch -import random import ttnn from tests.sweep_framework.sweep_utils.utils import gen_shapes diff --git a/tests/ttnn/unit_tests/operations/eltwise/test_binary_composite.py b/tests/ttnn/unit_tests/operations/eltwise/test_binary_composite.py index 78d333dfa810..c9f08cadd3e4 100644 --- a/tests/ttnn/unit_tests/operations/eltwise/test_binary_composite.py +++ b/tests/ttnn/unit_tests/operations/eltwise/test_binary_composite.py @@ -9,7 +9,6 @@ from tests.ttnn.unit_tests.operations.eltwise.backward.utility_funcs import ( data_gen_with_range, data_gen_with_range_int, - data_gen_with_val, compare_pcc, compare_equal, ) diff --git a/tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_math_unary_sfpu_api.h b/tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_math_unary_sfpu_api.h index 5324157d4a4a..91a4c6843843 100644 --- a/tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_math_unary_sfpu_api.h +++ b/tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_math_unary_sfpu_api.h @@ -25,3 +25,4 @@ #include "llk_math_eltwise_unary_sfpu_trigonometry.h" #include "llk_math_eltwise_unary_sfpu_unary_comp.h" #include "llk_math_eltwise_unary_sfpu_fill.h" +#include "llk_math_eltwise_unary_sfpu_prelu.h" diff --git a/tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_prelu.h b/tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_prelu.h new file mode 100644 index 000000000000..925f39b6493d --- /dev/null +++ b/tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/ckernel_sfpu_prelu.h @@ -0,0 +1,39 @@ +// SPDX-FileCopyrightText: © 2024 Tenstorrent Inc. +// +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "ckernel.h" +#include "ckernel_defs.h" +#include "noc_nonblocking_api.h" +#include "ckernel_sfpu_converter.h" + + +using namespace sfpi; + +namespace ckernel { +namespace sfpu { + +template +inline void calculate_prelu(const uint value) { + + // SFPU microcode + Converter c_value; + c_value.u = value; + vFloat init = c_value.f; + + #pragma GCC unroll 0 + for (int d = 0; d < ITERATIONS; d++) + { + vFloat a = dst_reg[0]; + v_if(a < 0.0f) { + a = a * init; + } + v_endif; + dst_reg[0] = a; + dst_reg++; + } +} +} // namespace sfpu +} // namespace ckernel diff --git a/tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/llk_math_eltwise_unary_sfpu_prelu.h b/tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/llk_math_eltwise_unary_sfpu_prelu.h new file mode 100644 index 000000000000..8bedfdbca2f8 --- /dev/null +++ b/tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu/llk_math_eltwise_unary_sfpu_prelu.h @@ -0,0 +1,29 @@ +// SPDX-FileCopyrightText: © 2024 Tenstorrent Inc. +// +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "ckernel_sfpu_prelu.h" +#include "llk_math_eltwise_unary_sfpu_params.h" +#include "llk_math_eltwise_unary_sfpu_init.h" + +namespace ckernel { + +// New LLK SFPU APIs + +template +inline void llk_math_eltwise_unary_sfpu_prelu_init() { + llk_math_eltwise_unary_sfpu_init(); +} + +template +inline void llk_math_eltwise_unary_sfpu_prelu(uint dst_index, uint param0, int vector_mode = (int)VectorMode::RC) { + llk_math_eltwise_unary_sfpu_params( + ckernel::sfpu::calculate_prelu, + dst_index, + vector_mode, + param0); +} + +} // namespace ckernel diff --git a/tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu_types.h b/tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu_types.h index f55b01c24ab7..8a7616784edd 100644 --- a/tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu_types.h +++ b/tt_metal/hw/ckernels/blackhole/metal/llk_api/llk_sfpu_types.h @@ -87,5 +87,6 @@ enum SfpuType { ceil, unused, cumsum, - fill + fill, + prelu, }; diff --git a/tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_prelu.h b/tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_prelu.h index a50eec93d287..22c288812610 100644 --- a/tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_prelu.h +++ b/tt_metal/hw/ckernels/wormhole_b0/metal/llk_api/llk_sfpu/ckernel_sfpu_prelu.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: © 2023 Tenstorrent Inc. +// SPDX-FileCopyrightText: © 2024 Tenstorrent Inc. // // SPDX-License-Identifier: Apache-2.0 @@ -23,7 +23,8 @@ inline void calculate_prelu(uint value) { c_value.u = value; vFloat init = c_value.f; - for (int d = 0; d < 8; d++) + #pragma GCC unroll 8 + for (int d = 0; d < ITERATIONS; d++) { vFloat a = dst_reg[0]; v_if(a < 0.0f) { diff --git a/tt_metal/include/compute_kernel_api/eltwise_unary/prelu.h b/tt_metal/include/compute_kernel_api/eltwise_unary/prelu.h index f691dfd8ad68..a5a674724e1d 100644 --- a/tt_metal/include/compute_kernel_api/eltwise_unary/prelu.h +++ b/tt_metal/include/compute_kernel_api/eltwise_unary/prelu.h @@ -28,7 +28,7 @@ namespace ckernel { * | Argument | Description | Type | Valid Range | Required | * |-----------------|----------------------------------------------------------------------------|----------|-------------------------------------------------------|----------| * | idst | The index of the tile in DST register buffer to perform the computation on | uint32_t | Must be less than the size of the DST register buffer | True | - * | param0 | The value the output is if the input is greater than 0 | uint32_t | | True | + * | param0 | Constant value that is being multiplied if the input is lesser than 0 | uint32_t | | True | */ ALWI void prelu_tile(uint32_t idst, uint32_t param0) { MATH((llk_math_eltwise_unary_sfpu_prelu(idst, param0)));