在CPU世界里,工程师通常关注如何让指令执行得更快、更高效,但一名硬件研究员却反其道而行,专门寻找x86架构中执行速度最慢的单条指令,并制作了一份“CPU反优化排行榜”。
来自GitHub的硬件研究员Christopher Domas(账号@xoreaxeaxeax)发起了名为“CPU Deoptimization leaderboard”的项目。这个项目的目标并不是优化汇编指令性能,而是寻找那些执行延迟最高、运行速度最慢的CPU指令。
在处理器设计和软件优化领域,指令延迟分析通常用于研究底层指令需要多少时间完成执行。工程师可以根据这些数据优化CPU架构,或者针对特定处理器优化软件运行方式。而Domas的项目则关注另一个极端:如果一条指令被刻意推向最慢状态,它究竟能慢到什么程度。
目前这份“慢指令排行榜”的冠军属于x86指令fxrstor64。该指令完成一次执行需要约62秒,总计超过1980亿个CPU周期。
fxrstor64的作用是恢复SIMD计算相关寄存器状态,将数据从一个512字节的内存区域加载回来。为了让这条指令达到最高延迟,Domas首先使用自己开发的mmiotic工具,寻找CPU内部PCIe互连结构中延迟较高的位置。
随后,他让CPU通过MMIO(Memory-Mapped I/O,内存映射输入输出)加载512字节状态数据,并尽可能降低这一过程的速度。第一次测试中,这个操作耗费约740亿个CPU周期,执行时间超过23秒。
但Domas并没有停止。他进一步“饿死”数据通路,在加载操作执行期间持续制造额外压力。
具体方式是通过另一个高延迟MMIO寄存器执行大量4字节读取操作,让CPU的PCIe Root Complex(根复合体)被大量无关读取请求占据,从而迫使状态恢复操作排队等待。
经过这一系列操作后,fxrstor64最终达到62秒的执行时间,成为目前排行榜中最慢的x86单条指令。
这个实验还可能继续刷新纪录。Domas计划利用英特尔Sapphire Rapids处理器支持的AMX指令测试xrstore64。由于AMX相关状态区域规模更大,可以从原本的512字节扩大到8KB,理论上可能让单条指令执行时间超过1万亿个CPU周期。
目前,x86慢指令排行榜已经发布到GitHub上,Domas还计划推出ARM和RISC-V架构版本。
为了保证测试结果有效,项目设定了一些规则。测试环境可以自由选择,但最终评分只能计算单条指令本身的执行时间。可被中断的指令不能参与排名,处理程序中执行的模拟指令也不能计入成绩。所有测试结果都会根据CPU基础频率进行标准化处理,同时测试平台不能进行硬件改造。
由于这是汇编级别的测试,排行榜反映的并不完全是某条指令本身的性能,而更多取决于研究人员如何利用该指令制造特殊执行条件。
Domas主要使用两颗处理器进行测试,分别是英特尔Core i7-8559U和AMD Ryzen 7 5800H,后者安装在Trigkey S5迷你电脑中。
对于rdmsr指令,Domas使用了一颗来自VIA的Eden系列嵌入式处理器。rdmsr用于读取型号特定寄存器(MSR,Model Specific Register)。根据Domas的说明,VIA处理器中存在一个未公开的0x133寄存器,该寄存器会产生非常高的响应延迟。
在这个平台上,rdmsr指令执行一次需要202微秒,约161602个CPU周期。
这并不是Domas第一次进行这种偏向底层极限探索的项目。他此前还开发过名为movfuscator的项目,这是一个只使用mov(移动)指令实现的C语言编译器。
从CPU架构研究角度看,寻找最慢指令并不会直接提升处理器性能,但它展示了现代CPU复杂的执行机制。单条指令的速度不仅受到运算单元影响,还会受到缓存、内存映射、总线结构以及硬件资源竞争等多个因素影响。Domas的实验正是利用这些底层机制,将一条普通指令推向了极端状态。
https://github.com/xoreaxeaxeax/asm-hall-of-shame
#资讯#CPU慢指令排行榜#x86硬件
关注我们,获取更多科技前沿资讯