作者: 张海军 来源:傅里叶的猫
这一篇2022年发表在FCCM上的论文,这篇文章介绍了一种使用机器学习(ML)准确预测FPGA上应用程序执行时间和功耗的方法。研究团队来自西密歇根大学,他们提出的方法旨在加速FPGA设计流程,绕过高层次综合(HLS)工具的缓慢合成与仿真过程,并减少用户设置时间的需求。
Introduction
尽管高层次综合(HLS)工具已使软件工程师能够探索现场可编程门阵列(FPGA),但它们在综合与仿真上的速度较慢,并需要用户的知识及设置时间。利用机器学习算法(ML)来预测FPGA上应用程序的执行时间和功耗可以显著加快这一进程。Oneal等人采用了随机森林结合CPU代码及其微架构依赖的运行时特征来预测FPGA的性能和功耗。然而,他们将基准测试划分为多个执行时间窗口(数据点),这些窗口可能相似。数据集中存在许多相似的数据点,可能导致模型对于新应用的泛化能力不佳。在本工作中,我们提出了一种快速、准确且具有广泛适用性的方法,利用集成机器学习来预测FPGA上应用程序的执行时间和功耗。我们的方法在三个层面上使用CPU代码及相关特性:LLVM-IR(中间表示)、源代码和动态运行时。我们采用交叉验证确保方法的准确性、鲁棒性和泛化能力。
Methodology
我们使用Legup 4.0 HLS工具来综合C/C++基准测试程序,并对19个基准进行了修改以适配Legup,其中包括全部12个CHStone、3个SHOC和4个Rodinia基准。为了收集每个基准的执行时间和功耗目标指标,我们在Legup生成的Verilog代码上,使用Quartus II进行后期布局与布线,如下图所示。我们使用CPU代码及特性,在源代码级别、与微架构无关的级别[6],以及使用LLVM IR与指令集架构无关的级别上,总计132个特性,结合机器学习算法来预测FPGA上的功耗和执行时间。这些特性被整合到一个数据集中,经过清洗后输入到基于机器学习的特征选择模型中。特征选择在不同层面上挑选特征以提高准确性。所选特征作为输入特征,连同相应的性能/功耗目标指标一起输入到度量预测模型中。我们使用Python 3.6.9和Scikit-learn 0.24库。
特征选择过程中利用随机森林算法进行降维,接着采用SelectKBest算法对特征进行排名并选择排名前18的特征。之后,我们通过穷举搜索为每种机器学习算法找到最优特征。由于数据集较小,为避免过拟合,我们根据寄存器年龄和存储指令这两个排名最高的特征,将数据集聚类为三个簇。我们比较了多种机器学习算法,包括线性回归与指数回归(LR & ER)、随机森林、决策树(DT)、K近邻(KNN)和人工神经网络(ANN)。我们使用五折交叉验证来验证我们的结果,确保特征选择和预测均无过拟合现象。
Results
下图展示了使用指数回归(最准确的算法)预测的时钟周期数(CC)、时钟周期(CP)、执行时间(ET)和功耗(P)的样本外百分比误差。结果显示,对于CC、CP、ET和P的预测百分比误差分别低至0.35%、0.1%、2%和0.2%。平均误差分别为2.2%、10.3%、11.14%和2.7%。TABLE 1对比了不同机器学习算法在100次运行中的平均错误率。此外,它还报告了使用所有Likwid性能监控计数器特征和随机森林算法的HLSPredict在我们数据集上的结果。
总结一下该论文:这篇论文中的方法不仅提高了FPGA性能和功耗预测的准确性,还通过机器学习方法实现了快速且泛化能力强的预测,为FPGA应用设计提供了有力支持。