Serpens is an HBM FPGA accelerator for SpMV.
Dependencies:
- TAPA + Autobridge
- Following Install TAPA to install TAPA(Autobridge) and Gurobi.
- Vitis 2021.2
- Xilinx xilinx_u280_xdma_201920_3 shell and a Xilinx U280 FPGA card.
The host code takes martrix market format(https://math.nist.gov/MatrixMarket/formats.html). We test on sparse matrices from SuiteSparse(https://sparse.tamu.edu) collection. To download a sample matrix for running, do
mkdir matrices
sh download_example.sh
cmake ..
make swsim
mkdir build
cd build
cmake ..
make swsim
cd build
cp ../run_tapa.sh ./
sh run_tapa.sh
After HLS, a bitstream generator file Serpens_generate_bitstream.sh is generated under the build folder.
sh Serpens_generate_bitstream.sh
We provide the generated bitstream. If you have a U280 FPGA ready, you don't need to generate the hwardware again, just run
TAPAB=../bitstream_a16/Serpens_xilinx_u280_xdma_201920_3.xclbin ./serpens ../matrices/nasa4704/nasa4704.mtx
To learn more about the techinqual details, please see this link.
If you find this code useful, please cite:
@inproceedings{song2022serpens,
author = {Linghao Song and Yuze Chi and Licheng Guo and Jason Cong},
title = {Serpens: A High Bandwidth Memory Based Accelerator for General-Purpose Sparse Matrix-Vector Multiplication},
booktitle={Proceedings of the 59th ACM/IEEE Design Automation Conference},
pages={211--216},
year = {2022}
}