一句话:提出通用 SpMSpM 加速器 Slaws,通过稀疏模式分析与负载编排提升数据复用和计算效率。
SLAWS 针对 SpMSpM 中非零元素分布高度不均导致的效率问题,以及专用加速器牺牲通用性和数据复用机会的不足,提出一种高效通用加速器架构。它通过分析不同稀疏模式并利用多种数据复用机会来加速计算。针对左乘数,采用 Pass-Aware 策略分析矩阵结构、识别独特稀疏模式并优化访存;针对右乘数,采用 Shuffle-Compare 策略,通过每周期近似 top-K 输出动态平衡计算单元间的乘法工作量,减少空闲时间。实验表明,SLAWS 相较两种最先进加速器取得 1.46× 和 1.43× 加速,相较 GPU 取得 1.55× 加速。
Sparse matrix-sparse matrix multiplication (SpMSpM) is widely used in modern scientific applications, including high-performance computing, linear algebra, and graph processing. However, the highly variable distribution of nonzero elements in these matrices presents a significant challenge to computational efficiency. While existing sparse matrix accelerators often rely on specialized architectures tailored for specific dataflow, these designs sacrifice generality and fail to fully exploit potential data reuse opportunities. In this paper, we propose Slaws, an efficient and general-purpose accelerator architecture for SpMSpM. This design accelerates computation by analyzing distinct sparsity patterns and leveraging various data reuse opportunities. We introduce two key strategies to address the challenges of different matrix operand positions. For the left multiplicand, we present a Pass-Aware strategy to analyze matrix structures, identify unique sparsity patterns, and optimize memory access. For the right multiplicand, we introduce a Shuffle-Compare strategy to dynamically balance the multiplication workload across computing units. By approximating the top-K outputs per cycle, this method minimizes idle time and ensures a balanced workload distribution. We implement both strategies in Slaws and conduct extensive experiments. The results show that Slaws achieves 1.46× and 1.43× speedups over two state-of-the-art accelerators, and 1.55× speedup over GPU.
@inproceedings{LiGZYW26,
title = {SLAWS: Spatial Locality Analysis and Workload Orchestration for Sparse Matrix Multiplication},
author = {Guoyu Li and Zheng Guan and Beichen Zhang and Jun Yu and Kun Wang},
booktitle = {ASPLOS},
year = {2026},
doi = {10.1145/3779212.3790222}
}