Skip to content

Commit 52e6b24

Browse files
committed
Update on "[cortex-m] Add scalar c++ op for dequantize_per_tensor"
Only buck build for now, CMake is next. No MVE, scalar only. Strictly the dtypes we care about update arg_meta to reflect that. Differential Revision: [D73164576](https://our.internmc.facebook.com/intern/diff/D73164576/) [ghstack-poisoned]
2 parents 9ecec7f + 0716bc3 commit 52e6b24

File tree

4 files changed

+42
-23
lines changed

4 files changed

+42
-23
lines changed

backends/cortex_m/ops/op_dequantize_per_tensor.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ T dequantize_val(
8080
K value,
8181
int64_t quant_min,
8282
int64_t quant_max) {
83-
(void) quant_min;
84-
(void) quant_max;
83+
(void)quant_min;
84+
(void)quant_max;
8585
return static_cast<T>((static_cast<int32_t>(value) - zero_point) * scale);
8686
}
8787

@@ -119,12 +119,13 @@ Tensor& dequantize_per_tensor_out(
119119
const size_t numel = input.numel();
120120

121121
#if defined(HAS_HELIUM_SIMD)
122-
// Helium MVE implementation for float32 to int8 quantization
123-
#Error "Implement MVE version!"
122+
// Helium MVE implementation for float32 to int8 quantization
123+
#Error "Implement MVE version!"
124124
#else
125125
// Scalar implementation for float32 to int8 quantization
126126
for (size_t i = 0; i < numel; i++) {
127-
out_data[i] = dequantize_val<int8_t, float>(scale, zp, input_data[i], qmin, qmax);
127+
out_data[i] =
128+
dequantize_val<int8_t, float>(scale, zp, input_data[i], qmin, qmax);
128129
}
129130
#endif
130131

@@ -139,9 +140,10 @@ Tensor& dequantize_per_tensor_out(
139140
int64_t quant_max,
140141
ScalarType dtype,
141142
Tensor& out) {
142-
KernelRuntimeContext context;
143-
return dequantize_per_tensor_out(context, input, scale, zero_point, quant_min, quant_max, dtype, out);
143+
KernelRuntimeContext context;
144+
return dequantize_per_tensor_out(
145+
context, input, scale, zero_point, quant_min, quant_max, dtype, out);
144146
}
145-
147+
146148
} // namespace native
147149
} // namespace cortex_m

backends/cortex_m/ops/op_quantize_per_tensor.cpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ T quantize_val(
8282
K value,
8383
int64_t quant_min,
8484
int64_t quant_max) {
85-
int32_t qvalue = zero_point + static_cast<int32_t>(std::nearbyint(inv_scale * value));
85+
int32_t qvalue =
86+
zero_point + static_cast<int32_t>(std::nearbyint(inv_scale * value));
8687
qvalue = std::max<int32_t>(qvalue, static_cast<int32_t>(quant_min));
8788
qvalue = std::min<int32_t>(qvalue, static_cast<int32_t>(quant_max));
8889
return static_cast<T>(qvalue);
@@ -123,12 +124,13 @@ Tensor& quantize_per_tensor_out(
123124
const size_t numel = input.numel();
124125

125126
#if defined(HAS_HELIUM_SIMD)
126-
// Helium MVE implementation for float32 to int8 quantization
127-
#Error "Implement MVE version!"
127+
// Helium MVE implementation for float32 to int8 quantization
128+
#Error "Implement MVE version!"
128129
#else
129130
// Scalar implementation for float32 to int8 quantization
130131
for (size_t i = 0; i < numel; i++) {
131-
out_data[i] = quantize_val<int8_t, float>(inv_scale, zp, input_data[i], qmin, qmax);
132+
out_data[i] =
133+
quantize_val<int8_t, float>(inv_scale, zp, input_data[i], qmin, qmax);
132134
}
133135
#endif
134136

@@ -143,9 +145,10 @@ Tensor& quantize_per_tensor_out(
143145
int64_t quant_max,
144146
ScalarType dtype,
145147
Tensor& out) {
146-
KernelRuntimeContext context;
147-
return quantize_per_tensor_out(context, input, scale, zero_point, quant_min, quant_max, dtype, out);
148+
KernelRuntimeContext context;
149+
return quantize_per_tensor_out(
150+
context, input, scale, zero_point, quant_min, quant_max, dtype, out);
148151
}
149-
152+
150153
} // namespace native
151154
} // namespace cortex_m

backends/cortex_m/test/op_dequantize_per_tensor_test.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
*/
88

99
#include <executorch/backends/cortex_m/ops/NativeFunctions.h> // Declares the operator
10-
#include <executorch/runtime/kernel/kernel_includes.h>
1110
#include <executorch/runtime/core/exec_aten/exec_aten.h>
12-
#include <executorch/runtime/core/exec_aten/testing_util/tensor_util.h>
1311
#include <executorch/runtime/core/exec_aten/testing_util/tensor_factory.h>
12+
#include <executorch/runtime/core/exec_aten/testing_util/tensor_util.h>
13+
#include <executorch/runtime/kernel/kernel_includes.h>
1414
#include <gtest/gtest.h>
1515

1616
using executorch::aten::ScalarType;
@@ -38,11 +38,18 @@ void test_dtype() {
3838

3939
KernelRuntimeContext ctx;
4040
dequantize_per_tensor_out(
41-
ctx, input, scale, zero_point, quant_min, quant_max, ScalarType::Char, out);
41+
ctx,
42+
input,
43+
scale,
44+
zero_point,
45+
quant_min,
46+
quant_max,
47+
ScalarType::Char,
48+
out);
4249

4350
EXPECT_TENSOR_EQ(out, expected);
4451
}
4552

4653
TEST(OpDequantizeOutTest, AllDtypesSupported) {
47-
test_dtype();
54+
test_dtype();
4855
}

backends/cortex_m/test/op_quantize_per_tensor_test.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
*/
88

99
#include <executorch/backends/cortex_m/ops/NativeFunctions.h> // Declares the operator
10-
#include <executorch/runtime/kernel/kernel_includes.h>
1110
#include <executorch/runtime/core/exec_aten/exec_aten.h>
12-
#include <executorch/runtime/core/exec_aten/testing_util/tensor_util.h>
1311
#include <executorch/runtime/core/exec_aten/testing_util/tensor_factory.h>
12+
#include <executorch/runtime/core/exec_aten/testing_util/tensor_util.h>
13+
#include <executorch/runtime/kernel/kernel_includes.h>
1414
#include <gtest/gtest.h>
1515

1616
using executorch::aten::ScalarType;
@@ -38,11 +38,18 @@ void test_dtype() {
3838

3939
KernelRuntimeContext ctx;
4040
quantize_per_tensor_out(
41-
ctx, input, scale, zero_point, quant_min, quant_max, ScalarType::Char, out);
41+
ctx,
42+
input,
43+
scale,
44+
zero_point,
45+
quant_min,
46+
quant_max,
47+
ScalarType::Char,
48+
out);
4249

4350
EXPECT_TENSOR_EQ(out, expected);
4451
}
4552

4653
TEST(OpQuantizeOutTest, AllDtypesSupported) {
47-
test_dtype();
54+
test_dtype();
4855
}

0 commit comments

Comments
 (0)