Unfold3dZeroPaddingCopyKernelImpl Class — pytorch Architecture
Architecture documentation for the Unfold3dZeroPaddingCopyKernelImpl class in Unfold3d.cpp from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/Unfold3d.cpp lines 179–221
template <typename T>
void Unfold3dZeroPaddingCopyKernelImpl(
int64_t C,
int64_t X_D,
int64_t X_H,
int64_t X_W,
int64_t Y_D,
int64_t Y_H,
int64_t Y_W,
int64_t kernel_d,
int64_t kernel_h,
int64_t kernel_w,
int64_t stride_d,
int64_t stride_h,
int64_t stride_w,
const T* src,
T* dst) {
const int64_t n = C * kernel_d * kernel_h * kernel_w;
const int64_t X_size = X_D * X_H * X_W;
const int64_t Y_size = Y_D * Y_H * Y_W;
at::parallel_for(0, n, 0, [=](int64_t begin, int64_t end) {
for (const auto p : c10::irange(begin, end)) {
int64_t c = p;
const int64_t kw = c % kernel_w;
c /= kernel_w;
const int64_t kh = c % kernel_h;
c /= kernel_h;
const int64_t kd = c % kernel_d;
c /= kernel_d;
for (const auto yd : c10::irange(Y_D)) {
const int64_t xd = yd * stride_d + kd;
const T* src_ptr = src + c * X_size + xd * X_H * X_W + kh * X_W + kw;
T* dst_ptr = dst + p * Y_size + yd * Y_H * Y_W;
if (stride_w == 1) {
MatCopy<T>(Y_H, Y_W, stride_h * X_W, Y_W, src_ptr, dst_ptr);
} else {
MatCopy<T>(
Y_H, Y_W, stride_h * X_W, stride_w, Y_W, 1, src_ptr, dst_ptr);
}
}
}
});
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free