From b6e13c4f8d23323c2288e50a0e37cbf7f96846b8 Mon Sep 17 00:00:00 2001 From: Devmate Bot Date: Sun, 14 Dec 2025 11:05:09 -0800 Subject: [PATCH] Your diff, D88106671, broke one test Reviewed By: hsharma35 Differential Revision: D89143173 --- .../generic/operators/quantized_op_macros.h | 30 +++++++++---------- .../cadence/generic/operators/targets.bzl | 1 + 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/backends/cadence/generic/operators/quantized_op_macros.h b/backends/cadence/generic/operators/quantized_op_macros.h index eda6de2e8d7..a64aa3f2636 100644 --- a/backends/cadence/generic/operators/quantized_op_macros.h +++ b/backends/cadence/generic/operators/quantized_op_macros.h @@ -9,11 +9,9 @@ #pragma once #include +#include #include -// Generate kernels that perform elementwise arithmetic on two quantized -// tensors. The tensors are either the same size, or the second tensor is a -// scalar. #define DECLARE_POINTWISE_TENSOR_QUANTIZED_BINARY_OP(BINARY_FUNC_NAME, OP) \ template \ void BINARY_FUNC_NAME( \ @@ -26,17 +24,19 @@ float out_scale, \ int32_t out_zero_point, \ ::executorch::aten::Tensor& out) { \ - const T* __restrict__ X_data = X.const_data_ptr(); \ - const T* __restrict__ Y_data = Y.const_data_ptr(); \ - T* __restrict__ out_data = out.mutable_data_ptr(); \ float inv_out_scale = 1.0f / out_scale; \ - for (size_t i = 0, e = X.numel(); i < e; ++i) { \ - float x = ::impl::generic::kernels::dequantize( \ - X_data[i], X_scale, X_zero_point); \ - float y = ::impl::generic::kernels::dequantize( \ - Y_data[i], Y_scale, Y_zero_point); \ - float z = x OP y; \ - out_data[i] = ::impl::generic::kernels::quantize( \ - z, inv_out_scale, out_zero_point); \ - } \ + ::torch::executor::apply_binary_elementwise_fn( \ + [X_scale, X_zero_point, Y_scale, Y_zero_point, inv_out_scale, \ + out_zero_point](const T x_val, const T y_val) { \ + float x = ::impl::generic::kernels::dequantize( \ + x_val, X_scale, X_zero_point); \ + float y = ::impl::generic::kernels::dequantize( \ + y_val, Y_scale, Y_zero_point); \ + float z = x OP y; \ + return ::impl::generic::kernels::quantize( \ + z, inv_out_scale, out_zero_point); \ + }, \ + X, \ + Y, \ + out); \ } diff --git a/backends/cadence/generic/operators/targets.bzl b/backends/cadence/generic/operators/targets.bzl index 6990a24db50..15e2f592f2e 100644 --- a/backends/cadence/generic/operators/targets.bzl +++ b/backends/cadence/generic/operators/targets.bzl @@ -15,6 +15,7 @@ def define_common_targets(): exported_headers = ["quantized_op_macros.h"], exported_deps = [ ":cadence_type_util", + "//executorch/kernels/portable/cpu/util:broadcast_util", "//executorch/runtime/kernel:kernel_includes", ] )