想象一下,你拥有一份极其复杂、杂乱无章的 gourmet 大餐食谱(即科学计算机程序)。你想要打造一台特殊的定制厨房电器(即硬件加速器),使其烹饪这道特定菜肴的速度比标准炉灶快 1000 倍,且能耗更低。
问题在于?建造这台定制电器,就像蒙着眼睛去打造法拉利引擎。这需要一位既是主厨,又是机械大师、电气工程师,并且精通一种非常特定且艰深的语言——“硬件设计”的奇才。大多数编写食谱的人(科学家)并不具备这些技能,因此他们只能继续使用标准炉灶(通用计算机),而这些炉灶在处理这些特定任务时既缓慢又浪费。
A3D 登场:这支“超级主厨机器人”团队。
本文介绍了 A3D,这是一个新系统,它利用由 AI“智能体”(智能软件工人)组成的团队,从头到尾完成定制厨房电器的设计工作,无需人类动手。
以下是 A3D 的工作原理,分为三个简单阶段:
第一阶段:侦探工作(分析)
在开始构建之前,你需要确切知道要构建什么。
- 问题: 科学程序规模庞大,包含数千行代码。找到那个拖慢整体速度的特定部分(即“瓶颈”),就像在 haystack 中找一根针,而这里 haystack 本身就是由无数根针组成的。
- A3D 的解决方案: A3D 派出一支侦探团队。
- 一个智能体阅读整份食谱,以理解其脉络。
- 另一个智能体在测试厨房中运行食谱,对每一步进行计时,精准定位厨师浪费时间的环节。
- 第三个智能体使用放大镜(静态分析),精确追踪该缓慢步骤所依赖的每一个食材和工具。
- 结果: 他们精准定位了确切的“缓慢步骤”,并绘制出所有依赖关系,确保他们确切知道需要修复什么。
第二阶段:翻新(准备)
既然找到了缓慢步骤,就需要为定制机器对其进行准备。
- 问题: 原始代码是用灵活但杂乱的语言(C++ 或 CUDA)编写的,而定制机器建造者(HLS 工具)无法理解。这就像试图将用古代象形文字绘制的蓝图交给现代建筑机器人。代码可能使用“动态内存”(例如抓取一个未知大小的盒子)或复杂的指针,而这些是机器人所厌恶的。
- A3D 的解决方案: 一支翻新团队进驻。
- 快照工程师: 对进入和离开缓慢步骤的数据进行“拍照”,以确保不会丢失食谱的风味。
- 测试 harness 开发者: 搭建一个小型的隔离测试厨房,确保翻新不会破坏风味。
- HLS 准备员: 这是主力。它将杂乱的代码重写为机器建造者能理解的干净、僵化的格式。它将复杂的工具替换为简单的工具,将“未知大小的盒子”转换为固定大小的板条箱,并将机器不认识的复杂数学函数替换为机器熟悉的函数。
- 验证员: 一位严格的检查员审查翻新成果。如果代码不完美,他们将其退回给翻新员进行修复。他们不断循环,直到代码 100% 准备就绪。
第三阶段:构建与优化(综合)
现在代码已准备好被转化为硬件。
- 问题: 构建机器有数百万种方式。你可以让它超快但体积巨大,或者体积小巧但速度慢。如何找到完美的平衡点?
- A3D 的解决方案:
- 数值探索者: 尝试计算中使用的数字的不同“精度”。也许你并不需要所有地方都使用 64 位精度;也许 20 位就足够了?这可以节省空间和功耗。
- 综合器: 将清理后的代码交给商用机器建造者(Catapult HLS),以生成实际的硬件设计。
- 设计空间枚举器: 这是总规划师。它运行数千次模拟,尝试速度与大小设置的所有可能组合。这就像测试汽车的所有可能齿轮比。
- 结果: 它生成一份“帕累托最优”设计列表。这些是最佳的可能权衡:“这是最快版本”,“这是最小版本”,以及“这是最佳平衡版本”。
为什么这很重要?
以前的 AI 工具只能协助此过程中的小部分,例如修复代码中的拼写错误或建议一个设置。它们假设人类已经完成了寻找问题和清理代码的艰苦工作。
A3D 是首个完成整个工作的系统。 它处理了现实世界中庞大的科学程序(例如模拟分子或量子化学),并在零人类协助的情况下,将它们转化为定制硬件设计。
“秘密配方”(它为何真正有效)
论文测试了 A3D,发现它之所以有效,仅归功于三个特定技巧:
- 专业化: 不是让一个 AI 试图包揽所有事情(这会导致错误),而是使用一个专家团队,每个人完美地完成一项工作。
- 工具优于猜测: 当 AI 需要更改代码时,它不会只是“猜测”新文本。它使用精确的数学工具(例如代码结构的拼写检查器)来确保更改绝对正确。
- “魔鬼代言人”: 每当一个专家完成一项任务时,一个“验证员”智能体就会尝试破坏它。如果验证员发现缺陷,专家必须修复它。这个循环持续进行,直到工作无懈可击。
结论
论文表明,A3D 可以处理复杂的科学代码(例如用于分子动力学的 LAMMPS 或用于量子化学的 QMCPACK),并自动设计定制硬件加速器。在一次测试中,它甚至将原本为图形卡(GPU)编写的代码成功重新设计为定制硬件加速器,证明其能够处理最棘手的场景。
简而言之,A3D 是一个完全自主的 AI 智能体团队,它充当桥梁,将复杂的软件问题转化为定制的高速硬件解决方案,而无需人类工程师手把手指导。
技术摘要:A3D:用于自主加速器设计的代理式 AI 流程
问题陈述
为复杂的科学应用设计硬件加速器仍然是一个高度劳动密集型的过程,需要在工作负载分析、微架构和电子设计自动化(EDA)工具方面具备深厚的专业知识。虽然高级综合(HLS)提高了抽象层次,但从识别大型 C/C++/CUDA 代码库中的性能瓶颈到生成优化的 RTL 的端到端工作流,仍然需要大量的人工干预。现有的 AI 驱动框架通常仅解决孤立的下游任务(例如设计空间探索或代码重构),但未能自动化上游的复杂性,包括分析全规模应用、从深层类层次结构中提取内核以及管理数据依赖关系。此外,单独使用大语言模型(LLM)容易产生幻觉,且缺乏对专有 EDA 工具文档的接触,使得可靠、自主的硬件生成变得困难。
方法论:A3D 代理流程
A3D 引入了一种端到端的代理式 AI 流程,实现了整个加速器设计流水线的自动化。该系统接受 C/C++/CUDA 应用程序代码库、代表性工作负载和自然语言指令,输出多样化的硬件加速器设计。系统将工作流分解为三个主要阶段,由顶层**接口代理(Interfacer agent)**协调,并由共享基础设施支持的专业代理执行。
1. 分析阶段
- 工作负载分析师:利用语义搜索理解应用程序功能和工作负载特征。
- 性能分析器:使用
gprof 等工具执行工作负载,以识别执行时间瓶颈。
- 瓶颈分析师:分析关键函数以确定数据结构依赖关系。它利用自定义的CodeQL工具进行静态分析,生成完整的 I/O 足迹(变量、类型和数据流方向),以指导后续提取。
2. 准备阶段
此阶段对识别出的瓶颈进行重构,使其与 HLS 兼容。
- 快照工程师:对代码进行插桩,以捕获执行期间的输入/输出数据结构状态。
- 测试 harness 开发者:创建隔离的测试 harness,以验证提取的内核与捕获的快照,确保数值正确性。
- HLS 准备器:协调对不支持的构造(例如动态内存、多级指针、STL 容器)的重构。这被分解为由专业代理处理的子任务:
- 数据结构剪枝:移除未使用的字段。
- 内存接口重构:使用基于 AST 的工具(
staticMem)将动态指针转换为静态数组。
- 类型转换:通过代理式 RAG 查询工具文档,将标准类型替换为 HLS 兼容的
ac_types。
- 数学函数替换:将标准数学函数替换为 HLS 优化的等效函数。
- 循环标记:添加用于优化指令的标识符。
3. 综合阶段
- 数值探索器:迭代优化数字格式和位宽(例如将
double 转换为 ac_fixed),以在保持功能正确性的同时最小化资源使用。
- 综合器:调用商业Catapult HLS工具。它分析综合日志和错误报告,利用代理式 RAG查询文档,并迭代优化代码直到综合成功。
- 设计空间枚举器(DSE):通过解析优化指令(循环展开、流水线、数组分区)的 YAML 规范,生成组合设计空间。它使用确定性工具(
genDSE)创建 Tcl 文件,并使用并行执行工具(runDSE)综合所有设计点,提取延迟 - 面积权衡的帕累托最优集。
关键架构原则
为了缓解 LLM 的局限性,A3D 采用了四个关键的基础设施组件:
- 任务分解:复杂任务在专用专业代理之间进行划分,而不是由单一模型处理。
- 工具增强:代理使用确定性的自定义工具(AST 转换、CodeQL)进行机械式代码更改,将 LLM 保留用于推理和规划。
- 对抗性验证:专业代理 - 验证器循环确保鲁棒性。专用的验证器代理批判性地评估专业代理的输出,提供反馈以进行迭代优化,直到达到质量标准。
- 代理式 RAG:两阶段检索管道(嵌入 + 重排序)允许代理语义搜索应用程序代码库和专有 EDA 文档(例如 Catapult 文档),以解决上下文缺失问题。
主要贡献
- 首个端到端自动化:A3D 是首个自动化从应用分析(包括复杂代码库中的工作负载分析和瓶颈识别)到设计空间探索的完整流程的框架,填补了以往仅解决下游阶段的工作所留下的空白。
- 处理复杂科学内核:该系统成功处理了来自大规模科学应用(LAMMPS、QMCPACK)的内核,这些内核具有深层类层次结构、动态内存和不规则数据依赖关系,通常是现有工具无法处理的。
- CUDA 到加速器:A3D 展示了提取和重构 CUDA 内核(特别是 LAMMPS 中的
k_lj_fast)为 HLS 兼容的 C++ 以进行自定义加速器设计的能力,这是此前未展示过的能力。
- 架构验证:通过消融研究,论文验证了任务分解、工具增强和验证循环的组合对于实现高可靠性自动化(准备阶段 96.7% 的成功率)是必要的,而更简单的配置则显著失败。
结果
- 基准测试:A3D 在来自 LAMMPS(分子动力学)和 QMCPACK(量子化学)的 8 个内核上进行了评估。
- 流程成功:系统在零人工干预的情况下自主处理了所有内核。它在所有内核中成功综合了 3,216 个设计点中的 1,036 个,产生了 92 个帕累托最优设计。
- 综合成功率:成功率因内核复杂度而异,范围从 5.6%(对于高度不规则的内核,如
PairLJCut::Compute())到 90.7%(对于 LRHandlerBase::Evaluate())。
- 性能与边缘 GPU 对比:与 NVIDIA Jetson AGX Orin 相比
PairLJCut 内核,A3D 生成的低延迟设计实现了 3.5 倍的功耗优势(1.04 W 对比 3.6 W),每次执行的能耗相当,尽管由于并行度较低导致延迟较高。
- 消融研究:
- 单体代理(配置 A):32.5% 的成功率。
- 多代理(配置 B):57.5% 的成功率(证明了分解的价值)。
- 多代理 + 工具(配置 C):75.0% 的成功率(证明了确定性工具的价值)。
- 完整 A3D(配置 D):96.7% 的成功率(证明了验证循环的必要性)。
- 只有完整架构(配置 D)实现了超过 90% 成功率的非零概率。
意义与主张
论文声称,A3D 代表了向复杂工程任务自主自动化迈出的重要一步。它认为,可靠的代理自动化不能仅靠 LLM 实现;相反,它需要一种协同架构,结合专业分解、确定性工具增强和对抗性验证。通过在没有人工干预的情况下从复杂的现实世界科学应用中成功生成硬件设计,A3D 展示了普及硬件加速的潜力,使应用领域专家能够在不需要深厚硬件设计专业知识的情况下利用自定义加速器。该工作强调,虽然当前的 LLM 存在局限性,但结构化的代理流程可以克服这些障碍,实现生产级的可靠性。
每周获取最佳 computer science 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。