scalar_t Class — pytorch Architecture
Architecture documentation for the scalar_t class in SoftMaxKernel.cpp from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/cpu/SoftMaxKernel.cpp lines 61–93
template<typename scalar_t>
inline typename std::enable_if_t<std::is_same_v<scalar_t, at::opmath_type<scalar_t>>, void>
_vec_softmax_lastdim(
const scalar_t* input_data_base,
scalar_t* output_data_base,
int64_t outer_size,
int64_t dim_size) {
using Vec = vec::Vectorized<scalar_t>;
// See Note: grain_size value of 0
parallel_for(0, outer_size, 0, [&](int64_t begin, int64_t end) {
for (const auto i : c10::irange(begin, end)) {
const scalar_t* input_data = input_data_base + i * dim_size;
scalar_t* output_data = output_data_base + i * dim_size;
scalar_t max_input = vec::reduce_all<scalar_t>(
[](Vec& x, Vec& y) { return vec::maximum(x, y); },
input_data,
dim_size);
vec::map(
[max_input](Vec x) { return (x - Vec(max_input)).exp(); },
output_data,
input_data,
dim_size);
scalar_t tmp_sum = vec::reduce_all<scalar_t>(
[](Vec x, Vec y) { return x + y; }, output_data, dim_size);
tmp_sum = 1 / tmp_sum;
vec::map(
[tmp_sum](Vec x) { return x * Vec(tmp_sum); },
output_data,
output_data,
dim_size);
}
});
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free