kSpatialDim Class — pytorch Architecture
Architecture documentation for the kSpatialDim class in qconv_dynamic.cpp from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/quantized/cpu/qconv_dynamic.cpp lines 25–63
template <int kSpatialDim>
at::Tensor PackedConvWeight<kSpatialDim>::apply_dynamic(
const at::Tensor& input,
bool reduce_range) {
TORCH_CHECK(
fbgemm::fbgemmSupportedCPU(), "Your CPU does not support FBGEMM.");
float x_min, x_max;
fbgemm::FindMinMax(
/*m=*/input.data_ptr<float>(),
/*min=*/&x_min,
/*max=*/&x_max,
/*len=*/input.numel());
// Input tensor is quantized as 8-bit unsigned values
static constexpr int precision = 8;
static constexpr bool is_signed = false;
// Calculate scale and zero point for quantization of input tensor
auto q_params = quant_utils::ChooseQuantizationParams(
/*min=*/x_min,
/*max=*/x_max,
/*qmin=*/is_signed ? -(1 << (precision - 1)) : 0,
/*qmax=*/
is_signed ? ((1 << (precision - 1)) - 1) : (1 << precision) - 1,
/*preserve_sparsity=*/false,
/*force_scale_power_of_two=*/false,
/*reduce_range=*/reduce_range);
// Quantize input
at::Tensor q_input = at::quantize_per_tensor(
input, q_params.scale, q_params.zero_point, c10::kQUInt8);
at::Tensor out =
apply_impl<false>(q_input, q_params.scale, q_params.zero_point);
return at::dequantize(out); // TODO: optimized kernel that outputs fp32 so
// this step isn't necessary
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free