spatial_dilated_max_pooling Class — pytorch Architecture
Architecture documentation for the spatial_dilated_max_pooling class in Pooling.cpp from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/quantized/cpu/Pooling.cpp lines 43–94
template <typename T>
void spatial_dilated_max_pooling(
const T* iData,
int64_t iC, // input/output channels
int64_t iH,
int64_t iW, // input sizes
int64_t oH,
int64_t oW, // output sizes
int64_t kH,
int64_t kW, // kernel size
int64_t sH,
int64_t sW, // strides
int64_t pH,
int64_t pW, // padding
int64_t dH,
int64_t dW, // dilation
T* oData) { // output arrays (data and max-index)
at::parallel_for(0, iC, 0, [&](int64_t start, int64_t end) {
for (const auto p : c10::irange(start, end)) {
const T* i_p = iData + p * iW * iH;
for (int64_t row = 0; row < oH; ++row) {
for (int64_t col = 0; col < oW; ++col) {
int64_t h_start = row * sH - pH;
int64_t w_start = col * sW - pW;
int64_t h_end = std::min(h_start + (kH - 1) * dH + 1, iH);
int64_t w_end = std::min(w_start + (kW - 1) * dW + 1, iW);
while (h_start < 0)
h_start += dH;
while (w_start < 0)
w_start += dW;
// local pointers
T* o_p = oData + p * oW * oH + row * oW + col;
// local max
auto max_val = std::numeric_limits<typename T::underlying>::lowest();
int64_t tcntr = 0; // center point
for (int64_t y = h_start; y < h_end; y += dH) {
for (int64_t x = w_start; x < w_end; x += dW) {
tcntr = y * iW + x;
auto val = (i_p + tcntr)->val_;
if (val > max_val) {
max_val = val;
}
}
}
*o_p = T(max_val); // Output.
}
}
}
});
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free