is_scatter_like Class — pytorch Architecture
Architecture documentation for the is_scatter_like class in ScatterGatherKernel.cpp from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/cpu/ScatterGatherKernel.cpp lines 100–154
template <bool is_scatter_like = true>
struct _cpu_scatter_gather_dim_loop {
template <typename scalar_t, typename func_t>
void operator()(
at::opmath_type<scalar_t>* self_data, int64_t self_dim_stride,
int64_t* index_data, int64_t index_dim_stride,
scalar_t* src_data, int64_t src_dim_stride,
int64_t dim, int64_t index_dim_size,
int64_t index_upper_bound,
func_t& f
) {
for (const auto i : c10::irange(index_dim_size)) {
int64_t idx_dim = index_data[i * index_dim_stride];
// we are not putting idx_dim in the error message because it disables
// loop optimization in clang-7
TORCH_CHECK(idx_dim >= 0 && idx_dim < index_upper_bound,
"index ", index_data[i * index_dim_stride],
" is out of bounds for dimension ", dim,
" with size ", index_upper_bound
);
f(
self_data + (is_scatter_like ? idx_dim : i) * self_dim_stride,
src_data + (is_scatter_like ? i : idx_dim) * src_dim_stride
);
}
}
template <typename scalar_t, typename func_t>
void operator()(
at::opmath_type<scalar_t>* self_data, int64_t self_dim_stride,
int64_t* index_data, int64_t index_dim_stride,
Scalar value,
int64_t dim, int64_t index_dim_size,
int64_t index_upper_bound,
func_t& f
) {
for (const auto i : c10::irange(index_dim_size)) {
int64_t idx_dim = index_data[i * index_dim_stride];
// we are not putting idx_dim in the error message because it disables
// loop optimization in clang-7
TORCH_CHECK(idx_dim >= 0 && idx_dim < index_upper_bound,
"index ", index_data[i * index_dim_stride],
" is out of bounds for dimension ", dim,
" with size ", index_upper_bound
);
auto temp = value.to<scalar_t>();
f(
self_data + (is_scatter_like ? idx_dim : i) * self_dim_stride, &temp
);
}
}
};
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free