30 秒看懂
Ron Minsky 与 Jane Street 硬件设计负责人 Andy Ray 讨论定制硬件的收益与成本、FPGA 的经济性,以及大型电路设计的难点。Ray 介绍了自己创建的嵌入 OCaml 的硬件设计库 Hardcaml,并解释了其中测试和工具的价值。 他们比较了底层电路生成与高层综合、Bluespec 等更高层次的方法,讨论开源生态,并探讨如何用 FPGA 处理交易所的海量数据。对话反映的是 2020 年采访时的技术和经济状况。
- 1定制架构硬件让设计者能够根据问题调整性能、功耗和成本,但构建和测试架构需要投入大量工作。
- 2可重新配置的 FPGA查找表和可编程路由让 FPGA 能够实现电路,并在之后加载修改后的设计,无需制造新芯片。
- 3Hardcaml 源于测试中的挫折测试平台占据硬件开发的大量时间,Ray 希望用一门完整的编程语言来编写它们。Hardcaml 将硬件构建和仿真嵌入 OCaml。
- 4抽象需要权衡Ray 比较了 Verilog、基于 C 的高层综合和 Bluespec 的带条件规则。更高层的抽象可以改善组合能力,但可能牺牲对信号的精确控制。
- 5在线速下处理市场数据Jane Street 使用可编程网络接口检查交易所特定的数据包,减少下游数据量和总线负载。
要点建议
- 硬件可以针对特定工作负载权衡性能、功耗与成本,但设计和验证仍然细致而艰巨。
- FPGA 让硬件可以重新配置;当规模足够大时,ASIC 则可能提供更好的性能和单片经济效益。
- Hardcaml 将电路构建嵌入 OCaml,并将仿真和测试连接到常用软件工具。
- 高层综合和基于规则的语言在抽象程度与精确控制之间提供了不同的取舍。
- 可编程网络硬件可以在线速下过滤和路由市场数据,再交给软件处理。
按章节阅读整理后的全文
定制硬件能带来什么
Ray 解释针对工作负载定制的架构和硬件设计的难点。对话比较了库、综合以及视频编解码和数据包处理的性能。
Ron Minsky 欢迎 Andy Ray 做客。Ray 领导 Jane Street 的硬件设计团队,此前曾设计调制解调器和视频编解码器。他创建了嵌入 OCaml 的硬件描述系统 Hardcaml。两人探讨了如何将芯片设计工具应用于更多对性能要求高的问题。
Ray 说,硬件可以为具体问题定制架构,在性能、成本和功耗之间进行细致权衡。CPU 本身也是一种硬件设计;产品也可以按照工作负载的需要,将处理器、数字信号处理器和定制模块组合起来。
Minsky 询问其中的缺点。Ray 说,设计者必须实现整个架构,处理海量细节。软件开发者可以依靠丰富的支持库;硬件领域也有可复用设计的供应商,这类设计通常称为 IP,但生态规模较小,价格通常也更高。
有些开源硬件模块可供使用,但 Ray 认为与软件相比,这个生态非常小。Minsky 指出,单个部分的逻辑也许很简单,但当完整系统包含大量组件时,由逻辑门和连线组成的静态图就很难理解。
Ray 解释说,NAND 是一种通用布尔函数:用 NAND 门构建的电路可以表示任何布尔函数。不过,设计者通常不会手工画出每个逻辑门。综合器会把加法器、多路复用器和寄存器等稍高层的描述转换成目标设备使用的底层元件。
ASIC 是为特定功能定制制造的芯片;FPGA 则可以重新编程,实现不同功能。Minsky 问,把任务从软件转到硬件后,性能能提升多少。Ray 强调,这取决于工作负载。
Ray 以 H.264 视频编码为例。高度优化的软件编码器在当时的处理器上只有关闭许多功能才能实现实时 1080p 编码;启用更多压缩功能就会变慢。硬件实现,包括跨多个 FPGA 的系统,则可以实时支持更多功能,供专业编码使用。
在这个例子中,Ray 描述的 FPGA 设计计算能力大约高出一个数量级。数据包处理也是一个适合的场景:大型硬件设计可以在一片芯片上接收多个网络端口的流量,并检查或路由数据包。Minsky 指出,吞吐量并非唯一优势;延迟和可预测性也很重要。
延迟与确定性
硬件可以以可预测的时序并行处理数据流,而 CPU 使用复杂技术执行顺序指令。内存和时钟之间的交互仍可能带来变化。
硬件设计可以按网络链路的线速处理送来的全部数据。一旦设计满足约束,其时序就可能比需要缓冲来应对变化的软件路径更容易预测。Ray 说,软件处理中的非确定性是 Jane Street 需要实际面对的问题。
Minsky 将硬件系统与现代 CPU 作比较:CPU 必须把看似顺序的指令流转化为并行执行。推测执行和预取依赖复杂的启发式策略,因此很难提前推断精确时序。同步电路通常在每个时钟周期执行设计好的工作。
Ray 为这种比较加了限定:硬件也不是绝对没有非确定性。时钟之间的交互和底层网络打包都可能带来微小变化。一种有用的思维模型是:大量简单操作并行读取旧信号、计算新值,并在时钟跳变时共同向前推进,不过多个时钟域让现实更加复杂。
外部 DDR 内存会引入更多时序变化。访问取决于存储体和地址范围规则、访问顺序,以及内存无法响应请求的周期性刷新。Ray 说,访问模式会显著影响可用带宽,但他预计,与有许多额外非确定性来源的软件系统相比,这种变化更容易管理。
Minsky 将区别归结为默认状态:硬件设计从一个基本确定的核心出发,但会与外部组件交互,也可能有意加入非确定性。软件在 CPU 上与其他工作同时运行,时序变化则很难彻底消除。
FPGA 的灵活性与 ASIC 的经济性
FPGA 将查找表与可编程路由结合起来,可以在部署后重新配置。ASIC 通常性能更好,但需要权衡制造成本和数量。
还有一个顾虑:每次修改设计都必须制造定制芯片吗?Ray 解释说,可重新配置的硬件解决了这个问题。FPGA 包含排列成网格的查找表,用来实现布尔函数;它们通过可编程路由连接,同时还有其他专用元件。
ASIC 设计需要经过复杂的工具流程,再由晶圆厂制造,第一片芯片可能需要几个月。使用 FPGA 时,设计者可以重置设备并加载新配置。修复漏洞或推出新版本时,可以更新已经部署的硬件。
灵活性也有代价。Ray 说,同一设计在 ASIC 上通常有更好的功耗、面积和时钟频率表现;他粗略估计功耗可低三到十倍。经济性取决于制造费用、数量以及设计是否需要变更,因此这些数字只是示例,并非普遍规律。
Minsky 认为,可编程芯片居然能接近定制电路的表现,本身就很了不起。即使 FPGA 的单片成本更高,它也让少量生产和不断变化的设计可以采用硬件。没有这种灵活性,许多专门的技术问题都不足以支撑定制芯片的成本。
Ray 举了当时采购中的例子:单买报价约 8,000 美元的 FPGA,在一项数量可观的多年协议下可能约为 500 美元。他将差价归因于提前制造承诺和库存经济性;这些数字反映的是对话当时的一个具体例子。
Ray 的硬件之路
大学项目和早期的 JPEG 编解码器任务让 Ray 走上硬件设计之路。他讲述了让电路真正运行时的成就感和涉及的思维模型。
谈到自己的经历,Ray 回忆起大学时学习计算机科学和物理。一门简短的硬件设计课程介绍了 VHDL 项目,包括乘法器和小型数字信号处理器。项目工作比课程本身更吸引他。
他最初从事游戏编程,后来加入一家规模很小的嵌入式软件和硬件 IP 公司。他提到自己对硬件感兴趣后,老板接下了一个在早期 Xilinx FPGA 上实现 JPEG 编码器和解码器的合同。Ray 接手了这个项目,发现自己很喜欢这项工作。
设计第一次在真实板卡上运行时让他印象深刻。它运行得并不完美,但经过几个月的设计,已经能完成预期工作中可以辨认的部分。Ray 说,让 FPGA 设计在真实系统中运行,至今仍是工作中最有成就感的时刻之一。
Minsky 问硬件为什么如此吸引人。Ray 也喜欢软件,但他说,完整的硬件设计往往需要很长时间才能运行,因此成果带来的满足感尤其强烈。小型软件库可以较早测试和分享;硬件项目则常常需要完成系统的更多部分,才能产生看得见的结果。
Ray 还喜欢在不同尺度上建立思维模型。一方面,他考虑单个组件;另一方面,他要考虑总线宽度、时钟频率、内存和 PCIe 的约束。系统层面的挑战是使用适量资源,让数据从输入流向输出而不中断。
Hardcaml 与软件式测试
测试平台带来的挫折促使 Ray 开发基于 OCaml 的硬件工具,最终诞生了 Hardcaml。仿真、波形、expect 测试和持续集成将设计工作与软件实践连接起来。
他对其他硬件语言的兴趣始于对工具的不满,尤其是测试工具。Verilog 和 VHDL 用来描述硬件,但设计者还要在设计的各个层次编写测试平台。测试是一项软件任务,而 Ray 觉得用 Verilog 构建这些测试框架并不顺手。
大约在 2003 年,Ray 发现了用 OCaml 实现的函数式硬件语言 Confluence,后来又发现了与这些思路相关的 OCaml 包 Hdcaml。用一门完整编程语言表达硬件的想法让他深受启发。他添加了库和连线,重写了系统,还为使用 Windows 的工作环境构建了一个 F# 版本。
回到 Linux 后,Ray 开发了后来成为 Hardcaml 的工具,这是他的第三次迭代。他重视其中的设计抽象,但他说,最大的吸引力是能够用 OCaml 编写测试平台。少量可组合的概念让他编写和测试硬件的效率远高于使用 Verilog 时。
Hardcaml 是一个 OCaml 库,严格来说是一门嵌入式领域专用语言。它为加法器、多路复用器和寄存器等电路组件提供函数;OCaml 代码将它们连接成图。工具随后可以处理这个图,其中包括在开发期间生成模型的仿真器。
波形查看器展示信号随时钟周期的变化,方便设计者检查信号转换及其相互关系。信号可以是一位,也可以是更宽的总线。这样的视图有助于展示电路随时间的行为,而不必每次测试都使用实体 FPGA。
Jane Street 将这一工作流程与构建系统和编辑器集成。Expect 测试会打印结果,再将结果粘贴回测试代码并提交到代码仓库。持续集成重新构建代码,找出导致测试失败的修改,为硬件设计者提供熟悉的软件开发循环。
Minsky 看到更广泛的文化差异:软件团队通常结合使用构建系统、集成测试、代码审查和持续集成,而传统硬件工具往往以图形化工作流程为中心。他将这一挑战与网络配置作比较:软件定义的方法也为另一个领域带来了类似的自动化和质量控制。
Ray 承认,昂贵的商业工具提供了覆盖率分析和受约束随机输入生成等有价值的功能,能够生成符合指定约束的输入。尽管如此,他仍然更愿意用一门优秀的通用编程语言编写测试逻辑。
提高抽象层次
Ray 将 Hardcaml 和 Verilog 与基于 C 的高层综合及 Bluespec 作比较。他们讨论了规则调度、可组合性,以及何时仍需要精确控制。
Minsky 问,为什么 Ray 更强调测试,而不是从根本上提高电路设计的抽象层次。Ray 说,Hardcaml 和 Verilog 使用的底层组件类型大体相同。Hardcaml 的宿主语言让生成和配置更有表现力,但生成的设计仍然接近电路层次。
Ray 谈到了几十年来提高硬件抽象层次的努力。他指出高层综合和 Bluespec 是值得关注的方法,同时质疑前者在多大范围内取得了成功。Minsky 则说,有用的软件思想也可能需要几十年才能成为主流,垃圾回收就是一个例子。
高层综合将 C 转换为并行硬件。Ray 对从本质上顺序的指令流中提取并行性持怀疑态度,不过熟悉 C 有助于这种方法获得采用。他承认,它对流式 DSP 类工作负载可能非常有效,并且可以根据对编译器的指导,从同一份源代码生成不同架构。
Bluespec 采用了另一种方法,以带条件的原子操作为基础。规则包含一个谓词和一个读取、更新状态的操作。其概念模型选择一个满足条件的规则;编译器分析依赖关系,将兼容的规则一起调度,以生成并行硬件。
Ray 说,Bluespec 还以更容易组合、类似对象的方式表达模块交互。设计者不必手动对齐相关的数据和有效性信号,而可以调用一个方法。对于 FIFO 操作,系统可以推迟规则,直到队列准备就绪,同时由编译器生成底层电路。
Minsky 将此与 Hardcaml 的核心电路表示作比较。OCaml 可以用模块化、通用的代码生成电路,例如共享的协议规范可以为软件和硬件生成接口。Bluespec 提供了更容易组合的硬件本身的表示,但最终仍须转化为连线和逻辑。
Minsky 问,Bluespec 的非确定性规则模型是否会削弱保证。Ray 对自己的回答加以限定:他读过的 Bluespec 资料比实际使用经验更多。他说,编译后的电路会调度满足条件的规则,源代码中的 pragma 可以指导优先级;实际系统在优雅的核心模型之外也有妥协。
Ray 认为,当必须精确控制信号行为时,仍然需要 Verilog 或 Hardcaml 这样的底层工具,例如在 DDR 接口处。更多抽象意味着把一些选择交给编译器。尽管如此,他预计 Jane Street 会在内部逻辑中探索类似 Bluespec 的抽象,但没有承诺采用特定实现。
他们比较了宿主语言和相关工具。Ray 提到一些 Python 框架,可以让系统先从高层模型开始,再逐步将各个部分细化到逻辑门。Hardcaml 提供了支持类似方法的接口,但他说,当时其 API 还没有将这一工作流程正式化。
语言与开源
Ray 比较了 OCaml、基于 Python 的工具和使用 Scala 的 Chisel。他认为,帮助人们采用 Hardcaml 需要更多库和真实的公开示例。
Chisel 使用 Scala 采用类似的嵌入式方法,并受益于教学资源和公开的 IP,包括 RISC-V 设计。Ray 认为函数式编程天然适合组合逻辑:函数把输入转换为输出,并且可以组合起来构建更大的电路。
Minsky 问到作为开源项目的 Hardcaml。Ray 希望更多人使用它,但他说,要推广它,仅有核心库还不够。当时只有少数外部用户作出贡献,项目还需要更多库和可供新人学习的真实公开设计。
Ray 说他已经开放了许多额外的库,但发布完整的内部设计更困难,因为团队必须区分哪些内容可以公开、哪些不可以。Chisel 公开的 RISC-V 生态为学习者提供了规模大得多的示例代码。Jane Street 希望在可行的情况下公开更多内容。
交易中的网络硬件
可编程网卡可以在数据到达主机前理解交易所特定的数据,在保持可预测的线速处理能力的同时减轻下游负载。
在交易领域,Ray 说 Jane Street 的硬件工作与网络数据包处理密切相关。他描述的平台是一张带 FPGA 的网卡:数据包可以通过普通驱动到达主机,也可以先由卡上的定制逻辑检查和转换。
通用网卡理解 Ethernet、IP 和 TCP 等标准协议,但通常不能理解任意应用层负载。由于 Jane Street 知道特定交易所的数据包格式,其 FPGA 设计可以更深入地解析市场数据,执行针对该交易所的操作。
例如,硬件可以把传入消息分组,送往不同的下游接口,让每个软件进程看到更少的数据。它还可以选择性地通过 PCIe 将信息发送给主机,减少总线流量以及软件需要检查的数据量。
Minsky 指出,美国市场的峰值可能达到每秒数百万条消息,而公司还会接收多个交易所的数据。Ray 补充说,来自多个高速来源的流量可能恰好在市场最繁忙时压垮 CPU。独立的硬件处理路径可以并行处理这些数据流。
目标是按照链路已知的最大速率设计系统,并用线速下连续到达的数据包进行测试。如果硬件满足这一上限,团队就能更有信心:它不会仅仅因为流量繁忙而跟不上。Minsky 认为,软件系统也可以从更严格的极限压力测试中受益。
同频道的其他文章
1:48:29EN → 简体中文
1:05:45EN → 简体中文
1:25:00EN → 简体中文
1:16:29EN → 简体中文
1:34:29EN → 简体中文
1:34:36EN → 简体中文