adaptive_max_pool3d_single_out_frame Class — pytorch Architecture
Architecture documentation for the adaptive_max_pool3d_single_out_frame class in AdaptiveMaxPooling3d.cpp from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/AdaptiveMaxPooling3d.cpp lines 94–169
template <typename scalar_t>
void adaptive_max_pool3d_single_out_frame(
const scalar_t *input_p,
scalar_t *output_p,
int64_t *ind_p,
int64_t sizeD,
int64_t isizeT,
int64_t isizeH,
int64_t isizeW,
int64_t osizeT,
int64_t osizeH,
int64_t osizeW,
int64_t istrideD,
int64_t istrideT,
int64_t istrideH,
int64_t istrideW)
{
at::parallel_for(0, sizeD, 0, [&](int64_t start, int64_t end) {
for (const auto d : c10::irange(start, end)) {
/* loop over output */
int64_t ot = 0, oh = 0, ow = 0;
for(ot = 0; ot < osizeT; ot++)
{
int64_t istartT = start_index(ot, osizeT, isizeT);
int64_t iendT = end_index(ot, osizeT, isizeT);
int64_t kT = iendT - istartT;
for(oh = 0; oh < osizeH; oh++)
{
int64_t istartH = start_index(oh, osizeH, isizeH);
int64_t iendH = end_index(oh, osizeH, isizeH);
int64_t kH = iendH - istartH;
for(ow = 0; ow < osizeW; ow++)
{
int64_t istartW = start_index(ow, osizeW, isizeW);
int64_t iendW = end_index(ow, osizeW, isizeW);
int64_t kW = iendW - istartW;
/* local pointers */
const scalar_t *ip = input_p + d*istrideD + istartT *istrideT + istartH*istrideH + istartW*istrideW;
scalar_t *op = output_p + d*osizeT*osizeH*osizeW + ot*osizeH*osizeW + oh*osizeW + ow;
int64_t *indp = ind_p + d*osizeT*osizeH*osizeW + ot*osizeH*osizeW + oh*osizeW + ow;
/* compute local max: */
int64_t it = 0, ih = 0, iw = 0;
int64_t maxindex = (it+istartT)*isizeH*isizeW + (ih+istartH)*isizeW + (iw+istartW);
scalar_t maxval = -std::numeric_limits<scalar_t>::infinity();
for(it = 0; it < kT; it++)
{
for(ih = 0; ih < kH; ih++)
{
for(iw = 0; iw < kW; iw++)
{
scalar_t val = *(ip + it*istrideT + ih*istrideH + iw*istrideW);
if ((val > maxval) || std::isnan(val))
{
maxval = val;
maxindex = (it+istartT)*isizeH*isizeW + (ih+istartH)*isizeW + (iw+istartW);
}
}
}
}
/* set output to local max */
*op = maxval;
/* store location of max */
*indp = maxindex;
}
}
}
}
});
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free