Paper: Procyon: Promoting Fine-Grain Multi-Tenancy to Optimize Sparse Streaming Accelerators (DAC 2026)
Procyon is a host-side scheduling framework that enables multi-tenant Sparse Matrix-Vector Multiplication (SpMV) on FPGA accelerators. It interleaves the edge lists of multiple sparse workloads into a single batched schedule, filling hardware stalls introduced by one workload with useful computation from another—improving both resource utilization and overall throughput.
This repository contains:
| File | Description |
|---|---|
procyon_host.cpp |
Unified host driver: runs Serpens, Chason, and Procyon schedulers and prints performance summary |
procyon_for_serpens_kernel.cpp |
HLS kernel implementing the architectural extensions required for Serpens hardware modes |
procyon_for_chason_kernel.cpp |
Coming Soon !!! |
multi_tenancy.h |
Procyon scheduling code and relevant functions |
crhcs.h |
Chason (Cross-HBM-Channel Scheduling, CrHCS) baseline |
procyon.h |
TAPA/HLS kernel interface and hardware constants |
sparse_helper.h |
Sparse matrix utilities (CSC/CSR conversion, PE-aware OoO edge-list generation) |
mmio.h |
Matrix Market I/O |
run.sh |
Build script (compiles host binary with TAPA) |
rtl.sh |
RTL synthesis script (TAPA → Vitis HLS → xclbin) |
exe.sh |
Example run script with the bundled matrices |
matrices/ |
Sample sparse matrices in Matrix Market format |
out/ |
Output directory for logs |
Two state-of-the-art FPGA SpMV accelerators serve as baselines:
- Serpens (DAC'22) uses PE-aware Out-of-Order (OoO) scheduling to reduce memory stalls.
- Chasoň (MICRO'25) uses Cross-HBM-Channel Scheduling (CrHCS) that redistributes non-zeros across HBM channels for better load balance.
Procyon sits on top of both: it takes the per-PE edge lists produced by either baseline and merges multiple workloads by filling stall slots of one matrix with non-zero computations from another. The result is a single, denser schedule that amortises overheads across all batched requests.
| Dependency | Version tested |
|---|---|
| TAPA | ≥ 0.1 |
| Xilinx Vitis / XRT | 2022.1+ |
| GCC / Clang with C++17 | GCC 9+ |
| OpenCL | Runtime provided by XRT |
bash run.shThis produces an executable named procyon.
bash exe.shor manually:
./procyon matrices/eris1176.mtx matrices/bcsstk23.mtx matrices/gemat12.mtx \
matrices/blckhole.mtx matrices/bcspwr08.mtx matrices/G55.mtxThe program will print:
- Per-workload statistics for Serpens (PE-aware OoO).
- Per-workload statistics for Chasoň (CrHCS).
- Per-batch statistics for Procyon multi-tenancy.
- A final summary table showing schedule-length reduction and estimated FPGA kernel time, including speedup of Procyon over both baselines.
After synthesising the bitstream with bash rtl.sh, export the path and re-run:
export TAPAB=build/Serpens_xilinx_u55c_gen3x16_xdma_3_202210_1.xclbin
./procyon matrices/eris1176.mtx matrices/bcsstk23.mtx ...====================================================================
Procyon - Multi-Tenancy SpMV Scheduling Framework
Baselines: Serpens (PE-aware OoO) | Chasoň (CrHCS)
====================================================================
--- Baseline 1: Serpens (PE-aware OoO scheduling) ---
[matrices/eris1176.mtx] NNZ=18552 Stalls=194568 TotalLen=213120 RU=91.29%
...
--- Baseline 2: Chason (Cross-HBM-Channel CrHCS scheduling) ---
[matrices/eris1176.mtx] NNZ=18552 Stalls=14216 TotalLen=32768 RU=43.38%
...
--- Procyon (on Serpens output) ---
Batch #1 NNZ=... Stalls=... TotalLen=... RU=...%
...
--- Procyon (on Chason output) ---
Batch #1 NNZ=... Stalls=... TotalLen=... RU=...%
...
====================================================================
SUMMARY
====================================================================
Serpens total schedule length : 473088
Procyon (on Serpens) schedule length : 155008
Improvement over Serpens : 318080 cycles (3.05x)
Chason total schedule length : 180224
Procyon (on Chason) schedule length : 155008
Improvement over Chason : 25216 cycles (1.16x)
====================================================================
If you use Procyon in your research, please cite:
@inproceedings{bakhtiar2026procyon,
title={Procyon: Promoting Fine-Grained Multi-Tenancy to Optimize Sparse Streaming Accelerators},
author={Bakhtiar, Ubaid and Sha, Jeremy and and Hosseini, Helya and Asgari, Bahar},
booktitle={Proceedings of the 63rd ACM/IEEE Design Automation Conference (DAC)},
year={2026}
}