q_avg_pool3d Class — pytorch Architecture
Architecture documentation for the q_avg_pool3d class in AveragePool3d.cpp from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/quantized/cpu/AveragePool3d.cpp lines 94–156
template <typename scalar_t>
Tensor q_avg_pool3d(
const Tensor& input,
IntArrayRef kernel_size,
IntArrayRef stride,
IntArrayRef padding,
bool ceil_mode,
bool count_include_pad,
std::optional<int64_t> divisor_override) {
auto [kW, kH, kD] = get_kernel(kernel_size);
auto [dW, dH, dD] = get_stride(stride, kW, kH, kD);
auto [padW, padH, padD] = get_padding(padding);
const int64_t nbatch = input.ndimension() == 5 ? input.size(-5) : 1;
const int64_t nInputPlane = input.size(-4);
const int64_t inputDepth = input.size(-3);
const int64_t inputHeight = input.size(-2);
const int64_t inputWidth = input.size(-1);
TORCH_CHECK(
!divisor_override.has_value() || divisor_override.value() != 0,
"divisor must be not zero");
auto output_shape =
get_output_shape(input, kW, kH, kD, dW, dH, dD, padW, padH, padD, ceil_mode);
const int64_t outputDepth = output_shape[output_shape.size() - 3];
const int64_t outputHeight = output_shape[output_shape.size() - 2];
const int64_t outputWidth = output_shape[output_shape.size() - 1];
auto input_nhwc = input.contiguous(MemoryFormat::ChannelsLast3d);
auto output = at::_empty_affine_quantized(
output_shape,
input_nhwc.options().memory_format(input_nhwc.suggest_memory_format()),
input_nhwc.q_scale(),
input_nhwc.q_zero_point(),
std::nullopt);
// fast path for channel last: qavg_pool_2d_nhwc_stub
qavg_pool3d_nhwc_stub(
input_nhwc.device().type(),
input_nhwc,
output,
nbatch,
nInputPlane,
inputWidth,
inputHeight,
inputDepth,
outputWidth,
outputHeight,
outputDepth,
kW,
kH,
kD,
dW,
dH,
dD,
padW,
padH,
padD,
count_include_pad,
divisor_override);
return output;
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free