paperbot · PL 论文追踪

全部论文 待读 收藏

P2 When FPGA Meets Dataflow Analysis: An Explorative Step

当 FPGA 遇上数据流分析:一次探索性尝试
OOPSLA 10(OOPSLA2)2026匹配度 3/10 · 论文属于程序分析与数据流分析,但核心是用 FPGA 专用硬件加速集合式数据流分析,既不涉及 LLM/Agent,也不涉及浮点程序分析、贝叶斯程序分析或 AI 与 PL 的交叉。仅作为静态分析底层技术可能与用户方向有间接关联,因此匹配度较低。引用 0 inbox
Fang Wei, Qinlin Chen, Nairen Zhang, Jiacai Cui, Tian Tan, Zhiqiang Zuo, Yue Li
crossref: 2026-10-02

AI 速览

一句话:提出 FpgaFlow,首个用 FPGA 专用硬件加速过程内集合式数据流分析的设计,借助分配性实现线性空间可扩展并取得平均 12–15 倍加速。

集合式(位向量)数据流分析是众多静态分析任务的基础构件,已有加速工作都从软件角度出发,借助多核 CPU、GPU、分布式系统等通用计算平台,而以硬件为中心、直接设计专用硬件来加速数据流分析的方向尚属空白。本文出于研究探索的目的,尝试用高度可定制、适合快速原型化领域专用硬件的 FPGA 来实现数据流分析,并首先聚焦广泛使用的过程内分析。作者发现,即使是这一场景,直接用 FPGA 实现经典 worklist 算法也不可行:其空间复杂度随过程规模超线性增长,很快耗尽 FPGA 有限的高速片上存储。为此提出 FpgaFlow:(1) 利用集合式数据流分析的分配性,把空间需求降为随过程规模线性增长,从而突破空间可行性瓶颈;(2) 通过硬件特有的并行性——带数据转发的流水线以及 BRAM 分区与复制——加速分析。在多个流行 Java 真实项目(平均 32.5k GitHub stars)上,用活跃变量与到达定值两种分析进行评估:FpgaFlow 与最先进的 Java 静态分析器 Tai-e 结果完全一致(合计 750 亿比特),并在仅 55 MHz 的 Xilinx Zynq-7020 上相比运行于服务器级 CPU(2.20–3.00 GHz)的 Tai-e 分别取得平均 15.45x 和 12.32x 的加速。

问题
集合式数据流分析是许多静态分析的基础,但已有加速方案均基于通用软件平台(单/多核 CPU、GPU、分布式系统),缺少以硬件为中心、设计专用硬件来直接加速的探索;且经典 worklist 算法直接映射到 FPGA 会因空间复杂度随过程规模超线性增长而不可行。
方法
提出 FpgaFlow,一种面向数据流分析的专用硬件设计:利用集合式数据流分析的分配性使空间随过程规模线性扩展,并通过带数据转发的流水线以及 BRAM 分区与复制等硬件并行机制加速过程内分析。
评估
在多个流行的真实 Java 项目上,用活跃变量和到达定值两种代表性分析,与最先进 Java 静态分析器 Tai-e 的软件实现对比:结果完全一致(合计 750 亿比特),并在 55 MHz 的 Xilinx Zynq-7020 FPGA 上取得平均 15.45x(活跃变量)与 12.32x(到达定值)的加速。
原文摘要(Abstract)

Set-based (a.k.a. bit-vector-based) dataflow analysis is a fundamental building block for many static analysis tasks, and significant effort has been devoted to accelerating it. Existing acceleration approaches address the problem from a software perspective, leveraging various general-purpose computing platforms, such as single- and multi-core CPUs, GPUs, and distributed systems. In contrast, a hardware-centric approach—designing specialized hardware that directly accelerates dataflow analysis—remains unexplored. Motivated by this gap and out of pure research curiosity, we conduct a preliminary exploration of designing specialized hardware for dataflow analysis using FPGAs, which are highly customizable and well suited for rapidly prototyping domain-specific hardware. As a first step toward hardware-accelerated dataflow analysis, we focus on the widely used intra-procedural dataflow analysis. However, we find that designing specialized hardware even for this setting is already challenging: a straightforward FPGA implementation of the classical worklist algorithm is infeasible, because its space complexity grows superlinearly with procedure size, quickly exhausting the FPGA's limited high-speed on-chip memory when analyzing large procedures. To address this challenge, we introduce FpgaFlow, a specialized hardware design for dataflow analysis that (1) overcomes the spatial infeasibility challenge by leveraging the distributivity of set-based dataflow analysis to achieve linear spatial scalability, and (2) accelerates analysis through hardware-specific parallelism—pipelining with data forwarding and BRAM partitioning and replication. We evaluate FpgaFlow on diverse and popular real-world Java projects (averaging 32.5k GitHub stars) using two representative dataflow analyses—live variables and reaching definitions—and compare it against their software implementations in a state-of-the-art Java static analyzer Tai-e. In terms of correctness, FpgaFlow produces exactly the same analysis results as Tai-e, amounting to 75 billion bits. In terms of acceleration, even on a modest Xilinx Zynq-7020 FPGA (55 MHz), FpgaFlow achieves an average speedup of 15.45x for live variables and 12.32x for reaching definitions compared with Tai-e running on a server-grade CPU (2.20 GHz to 3.00 GHz). We hope this work offers useful insights toward future FPGA-accelerated static analysis.

链接与引用

DOI 原文 · PDF(开放获取) ·

BibTeX
@article{paperbot12150,
  title = {When FPGA Meets Dataflow Analysis: An Explorative Step},
  author = {Fang Wei and Qinlin Chen and Nairen Zhang and Jiacai Cui and Tian Tan and Zhiqiang Zuo and Yue Li},
  journal = {Proceedings of the ACM on Programming Languages},
  volume = {10},
  number = {OOPSLA2},
  year = {2026},
  doi = {10.1145/3839508}
}