Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions backends/cadence/aot/functions_vision.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,16 @@
- arg_meta: null
kernel_name: impl::vision::native::quantized_conv_out

- func: cadence::quantized_conv2d_nchw.out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, Tensor weight_zero_point, Tensor bias_scale, float out_scale, int out_zero_point, Tensor out_multiplier, Tensor out_shift, *, Tensor(a!) out) -> Tensor(a!)
kernels:
- arg_meta: null
kernel_name: impl::vision::native::quantized_conv2d_nchw_out

- func: cadence::quantized_conv2d_nhwc.out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, Tensor weight_zero_point, Tensor bias_scale, float out_scale, int out_zero_point, Tensor out_multiplier, Tensor out_shift, *, Tensor(a!) out) -> Tensor(a!)
kernels:
- arg_meta: null
kernel_name: impl::vision::native::quantized_conv2d_nhwc_out

- func: cadence::quantized_layer_norm.out(Tensor input, Tensor in_scale, Tensor in_zero_point, int[] normalized_shape, Tensor weight, Tensor bias, float eps, float output_scale, int output_zero_point, *, Tensor(a!) out) -> Tensor(a!)
kernels:
- arg_meta: null
Expand Down
74 changes: 74 additions & 0 deletions backends/cadence/vision/operators/op_quantized_conv_out.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -603,6 +603,80 @@ void quantized_conv2d_nhwc_per_tensor_out(
out);
}

void quantized_conv2d_nchw_out(
KernelRuntimeContext& ctx,
const Tensor& input,
const Tensor& weight,
const Tensor& bias,
IntArrayRef stride,
IntArrayRef padding,
IntArrayRef dilation,
int64_t groups,
int64_t in_zero_point,
const Tensor& weight_zero_point,
const Tensor& bias_scale,
double output_scale,
int64_t output_zero_point,
const Tensor& out_multiplier,
const Tensor& out_shift,
Tensor& out) {
quantized_conv_out(
ctx,
input,
weight,
bias,
stride,
padding,
dilation,
groups,
in_zero_point,
weight_zero_point,
bias_scale,
output_scale,
output_zero_point,
out_multiplier,
out_shift,
false, // channel_last = false for NCHW
out);
}

void quantized_conv2d_nhwc_out(
KernelRuntimeContext& ctx,
const Tensor& input,
const Tensor& weight,
const Tensor& bias,
IntArrayRef stride,
IntArrayRef padding,
IntArrayRef dilation,
int64_t groups,
int64_t in_zero_point,
const Tensor& weight_zero_point,
const Tensor& bias_scale,
double output_scale,
int64_t output_zero_point,
const Tensor& out_multiplier,
const Tensor& out_shift,
Tensor& out) {
quantized_conv_out(
ctx,
input,
weight,
bias,
stride,
padding,
dilation,
groups,
in_zero_point,
weight_zero_point,
bias_scale,
output_scale,
output_zero_point,
out_multiplier,
out_shift,
true, // channel_last = true for NHWC
out);
}

} // namespace native
} // namespace vision
} // namespace impl
36 changes: 36 additions & 0 deletions backends/cadence/vision/operators/operators.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,42 @@ inline __attribute__((always_inline)) void linear_(
}
}

void quantized_conv2d_nchw_out(
::executorch::runtime::KernelRuntimeContext& ctx,
const ::executorch::aten::Tensor& input,
const ::executorch::aten::Tensor& weight,
const ::executorch::aten::Tensor& bias,
::executorch::aten::IntArrayRef stride,
::executorch::aten::IntArrayRef padding,
::executorch::aten::IntArrayRef dilation,
int64_t groups,
int64_t in_zero_point,
const ::executorch::aten::Tensor& weight_zero_point,
const ::executorch::aten::Tensor& bias_scale,
double output_scale,
int64_t output_zero_point,
const ::executorch::aten::Tensor& out_multiplier,
const ::executorch::aten::Tensor& out_shift,
::executorch::aten::Tensor& out);

void quantized_conv2d_nhwc_out(
::executorch::runtime::KernelRuntimeContext& ctx,
const ::executorch::aten::Tensor& input,
const ::executorch::aten::Tensor& weight,
const ::executorch::aten::Tensor& bias,
::executorch::aten::IntArrayRef stride,
::executorch::aten::IntArrayRef padding,
::executorch::aten::IntArrayRef dilation,
int64_t groups,
int64_t in_zero_point,
const ::executorch::aten::Tensor& weight_zero_point,
const ::executorch::aten::Tensor& bias_scale,
double output_scale,
int64_t output_zero_point,
const ::executorch::aten::Tensor& out_multiplier,
const ::executorch::aten::Tensor& out_shift,
::executorch::aten::Tensor& out);

} // namespace native
} // namespace vision
} // namespace impl
Loading