size_ Class — pytorch Architecture
Architecture documentation for the size_ class in vec512_qint.h from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/cpu/vec/vec512/vec512_qint.h lines 1028–1107
template <
typename T,
typename float_vec_return_type_,
typename int_vec_return_type_,
int size_>
struct VectorizedQuantizedConverter {
static constexpr int size() {
return size_;
}
static constexpr int float_num_vecs() {
return size() / 8;
}
static constexpr int int_num_vecs() {
return size() / 8;
}
using float_vec_return_type = float_vec_return_type_;
using int_vec_return_type = int_vec_return_type_;
using value_type = typename T::underlying;
std::array<value_type, size_> vals;
VectorizedQuantizedConverter(T val) {
for (const auto i : c10::irange(size())) {
vals[i] = val.val_;
}
}
VectorizedQuantizedConverter(const void* ptr) {
memcpy(vals.data(), ptr, sizeof(value_type) * size());
}
void store(void* ptr, int count = size()) const {
memcpy(ptr, vals.data(), count * sizeof(value_type));
}
float_vec_return_type dequantize(
Vectorized<float> scale,
Vectorized<float> zero_point,
Vectorized<float> scale_zp_premul [[maybe_unused]]) const {
float_vec_return_type rv;
for (const auto i : c10::irange(float_num_vecs())) {
float tmp_vals[16];
for (const auto j : c10::irange(16)) {
tmp_vals[j] = at::native::dequantize_val<T>(
scale[j], zero_point[j], T(vals[16 * i + j]));
}
rv[i] = Vectorized<float>(
tmp_vals[0],
tmp_vals[1],
tmp_vals[2],
tmp_vals[3],
tmp_vals[4],
tmp_vals[5],
tmp_vals[6],
tmp_vals[7],
tmp_vals[8],
tmp_vals[9],
tmp_vals[10],
tmp_vals[11],
tmp_vals[12],
tmp_vals[13],
tmp_vals[14],
tmp_vals[15]);
}
return rv;
}
float_vec_return_type dequantize(
Vectorized<float> scale,
Vectorized<float> zero_point) const {
Vectorized<float> scale_zp_premul;
return dequantize(scale, zero_point, scale_zp_premul);
}
protected:
VectorizedQuantizedConverter() {}
};
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free