binary_kernel_reduce_vec Class — pytorch Architecture
Architecture documentation for the binary_kernel_reduce_vec class in Reduce.h from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/cpu/Reduce.h lines 250–280
template <typename func_t, typename vec_func_t>
void binary_kernel_reduce_vec(TensorIteratorBase& iter, func_t op, vec_func_t vop, double ident = 0) {
using traits = binary_function_traits<func_t>;
static_assert(
all_same<
typename traits::result_type,
typename traits::arg1_t,
typename traits::arg2_t>::value,
"all types must match");
iter.output_base().fill_(ident);
iter.parallel_reduce([&](char** data, const int64_t* strides, int64_t size0, int64_t size1) {
int64_t outer_strides[] = { strides[2], strides[3] };
if (is_contiguous_reduction<traits>(strides)) {
// input is contiguous in dim 0, output is reduced in dim 0
UNARY_OUTER_LOOP(data, outer_strides, size1, [&] {
vectorized_inner_reduction(data, size0, op, vop);
});
} else if (is_outer_reduction<traits>(strides)) {
// input and output are contiguous in dim 1
int64_t inner_stride = strides[1]; // stride of input in dim 0
vectorized_outer_reduction(data, inner_stride, size0, size1, op, vop);
} else {
UNARY_OUTER_LOOP(data, outer_strides, size1, [&] {
char* ptrs[3] = { data[0], data[0], data[1] };
int64_t inner_strides[3] = { strides[0], strides[0], strides[1] };
basic_loop(ptrs, inner_strides, 0, size0, op);
});
}
});
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free