Callipepla & SerpensCG are Conjugate Gradient (CG) solvers on High Bandwdith Memory (HBM) FPGA (Xilinx Alveo U280).
Requirements:
- 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 for runing SerpensCG and Callipepla.
- xilinx_u55c_gen3x16_xdma_3_202210_1 shell to run Callipepla on a Xilinx U55c 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. We have a few local examples in the matrices folder.
For SerpensCG,
cd SerpensCG; mkdir build; cd build;
g++ -o serpenscg -Wno-write-strings -Wunused-result -O2 ../src/serpenscg.cpp ../src/serpenscg-host.cpp -ltapa -lfrt -lglog -lgflags -lOpenCL
For Callipepla,
cd Callipepla; mkdir build; cd build;
g++ -o callipepla -Wno-write-strings -Wunused-result -O2 ../src/callipepla.cpp ../src/callipepla-host.cpp -ltapa -lfrt -lglog -lgflags -lOpenCL
For SerpensCG,
cd SerpensCG; cd build;
cp ../run_tapa.sh ./;
sh run_tapa.sh
For Callipepla,
cd Callipepla; cd build;
cp ../run_tapa.sh ./;
sh run_tapa.sh
run the script generated by TAPA under run-x
.
For SerpensCG,
cd SerpensCG
TAPAB=./bitstream/SerpensCG_xilinx_u280_xdma_201920_3.xclbin ./serpenscg ../matrices/mhd3200b/mhd3200b.mtx 100
For Callipepla,
cd Callipepla
TAPAB=./bitstream/Callipepla_xilinx_u280_xdma_201920_3.xclbin ./callipepla ../matrices/mhd3200b/mhd3200b.mtx 100
To learn more about the techinqual details, please see Callipepla: Stream Centric Instruction Set and Mixed Precision for Accelerating Conjugate Gradient Solver.
If you find this code useful, please cite:
@inproceedings{song2023callipepla,
title={Callipepla: Stream Centric Instruction Set and Mixed Precision for Accelerating Conjugate Gradient Solver},
author={Song, Linghao and Guo, Licheng and Basalama, Suhail and Chi, Yuze and Lucas, Robert F and Cong, Jason},
booktitle={The 2023 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays},
year = {2023}
}