unpack Class — pytorch Architecture
Architecture documentation for the unpack class in pack_block_sparse.h from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/quantized/cpu/qnnpack/include/pack_block_sparse.h lines 292–330
template <typename INDICES_DTYPE>
void TypedBCSRMatrix<INDICES_DTYPE>::unpack(
int8_t* dst,
const int64_t num_rows,
const int64_t num_cols,
const uint8_t* zero_points) const {
for (int64_t i = 0; i < num_rows; i++) {
memset(
dst + i * num_cols,
static_cast<int8_t>(static_cast<int16_t>(zero_points[i]) - 128),
num_cols * sizeof(int8_t));
}
const int64_t num_block_rows = static_cast<int64_t>(row_values.size()) - 1;
const int64_t block_size = (int64_t)row_block_size * col_block_size;
int64_t weight_values_num = 0;
for (int64_t block_row_num = 0; block_row_num < num_block_rows;
block_row_num++) {
const int64_t num_blocks_in_current_block_row =
row_values[block_row_num + 1] - row_values[block_row_num];
for (int64_t k = 0; k < num_blocks_in_current_block_row;
k++) { // iterate over each block in the row
const int64_t block_start_row_num = block_row_num * row_block_size;
const int64_t block_start_col_num =
(int64_t)(col_indices[weight_values_num / block_size]) *
col_block_size;
for (int64_t l = 0; l < block_size;
l++) { // iterate over each value in the block
const int64_t row_num = block_start_row_num + l / col_block_size;
const int64_t col_num = block_start_col_num + l % col_block_size;
if (row_num < num_rows && col_num < num_cols) {
dst[row_num * num_cols + col_num] = static_cast<int8_t>(
static_cast<int16_t>(values[weight_values_num]) - 128);
}
weight_values_num++;
}
}
}
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free