is_same_v Class — pytorch Architecture
Architecture documentation for the is_same_v class in moments_utils.h from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/cpu/moments_utils.h lines 82–110
template <typename T>
inline std::enable_if_t<!std::is_same_v<T, at::opmath_type<T>>, void>
UpdateMomentsVec(
int64_t m0,
const T* X_ptr,
const std::array<vec::Vectorized<at::opmath_type<T>>, kChunkSize>& c_vecs,
int64_t& m0_stk0,
vec::Vectorized<at::opmath_type<T>>& m1_stk0,
vec::Vectorized<at::opmath_type<T>>& m2_stk0) {
using Vec = vec::Vectorized<T>;
using fVec = vec::Vectorized<at::opmath_type<T>>;
fVec m1_fvec0(0), m1_fvec1(0);
fVec m2_fvec0(0), m2_fvec1(0);
for (const auto j : c10::irange(m0)) {
const Vec x_bvec = Vec::loadu(X_ptr + j * Vec::size());
const fVec tmpVec = c_vecs[j];
auto [x_fvec0, x_fvec1] = convert_to_float<T>(x_bvec);
const fVec delta_fvec0 = x_fvec0 - m1_fvec0;
const fVec delta_fvec1 = x_fvec1 - m1_fvec1;
m1_fvec0 = fmadd(delta_fvec0, tmpVec, m1_fvec0);
m1_fvec1 = fmadd(delta_fvec1, tmpVec, m1_fvec1);
const fVec delta_fvec2 = x_fvec0 - m1_fvec0;
const fVec delta_fvec3 = x_fvec1 - m1_fvec1;
m2_fvec0 = fmadd(delta_fvec0, delta_fvec2, m2_fvec0);
m2_fvec1 = fmadd(delta_fvec1, delta_fvec3, m2_fvec1);
}
AddMomentsVec(m0, m1_fvec0, m2_fvec0, m0_stk0, m1_stk0, m2_stk0);
AddMomentsVec(m0, m1_fvec1, m2_fvec1, m0_stk0, m1_stk0, m2_stk0);
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free