add_out_sparse_eigen Class — pytorch Architecture
Architecture documentation for the add_out_sparse_eigen class in SparseBlasImpl.cpp from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/sparse/eigen/SparseBlasImpl.cpp lines 97–140
template <typename scalar_t>
void add_out_sparse_eigen(
const at::Tensor& mat1,
const at::Tensor& mat2,
const at::Scalar& alpha,
const at::Tensor& result) {
// empty matrices
if (mat1._nnz() == 0 && mat2._nnz() == 0) {
return;
}
if (mat2._nnz() == 0 || alpha.toComplexDouble() == 0.) {
sparse_indices_and_values_resize(result, mat1._nnz());
result.copy_(mat1);
return;
} else if (mat1._nnz() == 0) {
sparse_indices_and_values_resize(result, mat2._nnz());
result.copy_(mat2);
result.values().mul_(alpha);
return;
}
c10::ScalarType result_index_dtype = at::sparse_csr::getIndexDtype(result);
sparse_indices_to_result_dtype_inplace(result_index_dtype, mat1);
sparse_indices_to_result_dtype_inplace(result_index_dtype, mat2);
AT_DISPATCH_INDEX_TYPES(
result_index_dtype, "eigen_sparse_add", [&]() {
scalar_t _alpha = alpha.to<scalar_t>();
if (result.layout() == kSparseCsr) {
auto mat1_eigen = Tensor_to_Eigen<scalar_t, Eigen::RowMajor, index_t>(mat1);
auto mat2_eigen = Tensor_to_Eigen<scalar_t, Eigen::RowMajor, index_t>(mat2);
auto mat1_mat2_eigen = (mat1_eigen + _alpha * mat2_eigen);
Eigen_to_Tensor<scalar_t, Eigen::RowMajor, index_t>(result, mat1_mat2_eigen);
} else {
auto mat1_eigen = Tensor_to_Eigen<scalar_t, Eigen::ColMajor, index_t>(mat1);
auto mat2_eigen = Tensor_to_Eigen<scalar_t, Eigen::ColMajor, index_t>(mat2);
auto mat1_mat2_eigen = (mat1_eigen + _alpha * mat2_eigen);
Eigen_to_Tensor<scalar_t, Eigen::ColMajor, index_t>(result, mat1_mat2_eigen);
}
});
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free