(图片来源:AMD)
上个月,Google安全研究团队发布了一款名为Zentool的工具,该工具能够修改基于Zen微架构的AMD处理器的微代码。尽管这暴露了一个安全漏洞,但对某些人而言,这却是一个契机。中国Jiachen项目的成员正举办一场竞赛,旨在开发一种微代码,让AMD的现代Zen架构CPU能够原生执行RISC-V程序。他们的最终目标,或许是利用现有芯片打造出终极RISC-V CPU。
x86是一种复杂指令集计算机(CISC)指令集架构(ISA),距今已有约48年的历史。然而,现代x86核心内部依赖专有引擎,运行精简指令集计算机(RISC)ISA来处理复杂指令。这些内部RISC ISA并未公开文档,但它们通常应与众所周知的RISC ISA(如Arm或RISC-V)相似。CPU微代码作为底层机制,负责将复杂的x86 CISC指令转换为CPU硬件可执行的简单类RISC内部指令。理论上,CPU微代码应由CPU供应商独家修改,但实际情况并非如此。显然,AMD的Zen 1/2/3/4微代码的部分内容可以通过Zentool进行更改。
Jiachen项目成员正在寻找能够修改AMD Zen CPU微代码的人才,使其能在现代处理器(如EPYC 9004系列)上执行RISC-V二进制文件。该补丁预计能实现RISC-V程序的直接执行,或相较于使用相同硬件的仿真环境,显著提升其运行速度。测试工作需使用Coremark或Dhrystone等基准测试的RISC-V版本。完整的提交应包括二进制文件或源代码、配置文件、依赖项及测试说明。若仅在6月6日截止日期前提交二进制文件,则后续必须通过拉取请求补充相同的源代码。获胜者将获得20,000元人民币(约合2,735美元)的奖金。
AMD的EPYC 9004系列及类似处理器在性能和核心数上远超当前可用的基于RISC-V的处理器,因此在EPYC上执行专有RISC-V程序是一个合理的设想。然而,微代码的主要目的是修复内部错误,而非完全替换前端ISA。在Ycombinator上,甚至有人对微代码是否能完全重写表示怀疑。
早在2010年代中期,AMD就计划推出支持x86-64和Armv8-A的Zen CPU(AMD首席架构师Mike Clarke近期对此进行了回顾),因此很有可能存在支持Aarch64前端ISA的Zen 1微架构微代码。也就是说,Zen 1 CPU可能拥有多个微代码层“插槽”,一个支持x86-64,另一个支持Aarch64。不过,我们怀疑实际情况并非如此,因为现代CPU在硬件性能优化方面做得非常彻底,包括微代码与核心其余部分之间的硬连线优化。AMD几乎从未为Zen 2/3/4处理器开发过支持Aarch64或RISC-V的微代码,因此这些CPU的微代码层严格来说仅支持x86-64,几乎没有足够的空间来从头开始重写它们。
“这是不可能实现的,”一位名为Monocasa的评论者写道,“即便作为一次超级缓慢的黑客尝试,也没有足够的可重写微代码来完成这一任务。即便所有微代码均可重写,微代码也只是现代x86核心上的一种备用路径,快速路径是为x86指令进行硬连线解码。即便情况并非如此,微代码解码和跳转本身也是为x86指令格式进行硬连线。即便情况并非如此,微操作也极具非RISC特性。”
有评论者批评了竞赛的形式,认为这是在以不到3,000美元的价格寻求完成复杂工作的方案。
总体而言,尽管可重写微代码的概念颇具吸引力,并引发了关于替代CPU设计、多ISA支持和低级优化的讨论,但这场竞赛似乎难以实现既定目标。或许,为x86 CPU重写(或重新编译)一两个RISC-V程序会更有意义?