开发者生态
morning
耻辱大会堂
摘要
Instruction latency analysis usually focuses on performance optimization —making code run as fast as possible. The Assembly Hall of Shame takes the opposite approach: searching for the absolute floor ...
the
data16
CPU
latency
Strategy
instruction
fxrstor64
load
byte
high
2026-08-08
1 阅读
约8分钟阅读
piotrgrabowski
字号:
指令延迟分析通常侧重于性能优化——使代码尽可能快地运行。耻辱大会堂采取了相反的方法:寻找单指令性能的绝对下限。策略:使用 fxrstor64 从 PCIe 结构中的高延迟 MMIO 区域加载 512 字节 FPU/MMX/XMM 状态,然后在负载运行时使结构处于饥饿状态 — 一组锤子核心通过紧密的 4 字节读取敲击不同的高延迟 MMIO 寄存器,使 PCIe 根复合体和端点充满非发布事务,因此 CPU 0 的 512 字节 fxrstor64 必须在所有竞争的交通后面排队。竞争者:AMD Ryzen 7 5800H; CPU 0 — 定时指令 movl $0xfcc68830 , % rsi fxrstor64 % rsi ; CPU 1..N — 针对不同高延迟位置 movl 0xfcc68858 , % eax 的锤子循环 🏆 分数:198,002,498,236 个周期 🏆 时间:62 秒 违反规范的未对齐 ymm0 负载强制来自停滞的 GPU 寄存器的非发布双字事务被用来破坏系统管理模式的基本设计smiiiiiiiiiiiiiiii 。 vmovdqu 0xfcc003b1 , % ymm0 指令可以使用任何必要的设置,但只有一条指令有资格进行评分。陷阱/模拟/虚拟指令只能对陷阱计时,而不对处理程序计时。指令不得被中断。代表 movs 、 暂停 等被取消资格。时间根据 CPU 基本时钟频率进行标准化。所有平台必须采用工厂库存配置 - 不得进行硬件修改。策略:nop 什么都不做。它会相应地打开排行榜。竞争者:Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz 分数:1 个周期 时间:0 纳秒 策略:常规 nop 太短,但我们如何才能让任何事情都花费更长的时间?尝试 lonnnnnng nop 。竞争者:Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz data16 data16 data16 data16 data16 data16 data16 nopl 0x00000000(%%eax,%%eax,1) 分数:20 个周期 时间:7 纳秒 策略:只是一个参考指令来了解我们的方位。竞争者:Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz 分数:49 个周期 时间:18 纳秒 策略:使用 128 位除数 (rdx:rax=2:0) 和小除数将商推到符号扩展所施加的上限之上,驱动通过除法器微码的最长路径。竞争者:Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz xorq % rax , % rax ; rax = 0(被除数的低 64 位) movq $ 2 , % rdx ; rdx = 2 (高 64 位: 全部股息 = 2^65) movq $ 5 , % rbx ;除数 → 商 = 2^65/5 ≈ 7.4×10^18 idivq % rbx 得分:77 个周期 时间:28 纳秒 策略:使用最大嵌套深度 (31) 强制加载 30 个显示指针并推动微代码显示行走路径。竞争者:Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz 输入 0 美元、31 美元;分配 0 个字节,嵌套深度 31(最大) 分数:112 个周期 时间:41 纳秒 策略:尝试一个小的非正规值来触发 FP 微码辅助。竞争者:Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz movabsq $ 0x0000000000000001 , % rax movq % rax , - 8 (% rsp ) fldl - 8 (% rsp ) 得分:133 个周期 时间:49 纳秒 策略:只要确保缓存行脏了。竞争者:Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz clflush (% rax ) ; rax -> 脏缓存行驻留在 L3 分数:165 个周期时间:60 纳秒策略:使用指数 0x7ff 达到微码中的“特殊值”处理;正/负,NaN/inf 似乎没有什么区别,请使用 QNaN。竞争者:Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz movabsq $ 0x7fffffffffffffff , % rax movq % rax , - 8 (% rsp ) fldl - 8 (% rsp ) fsin 分数:257 个周期 时间:94 纳秒 策略:使所有内容饱和将行填充缓冲区与 movnti 存储结合到不同的缓存行,强制 mfence 在退出之前将完整的 LFB 写入路径耗尽到非核心。竞争者:Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz movnti % r9 , 0 * 64 (% rdi ) ; ×16 个不同的缓存行 — 使写入组合 LFB 饱和; ... movnti % r9 , 15 * 64 (% rdi ) mfence ;必须在退出之前耗尽所有挂起的 LFB 写入 分数:326 个周期 时间:120 纳秒 策略:暂时没有,只需检查使 TLB 失效需要多长时间。竞争者:配备 Radeon Graphics (Trigkey S5) 的 AMD Ryzen 7 5800H 得分:352 个周期 时间:110 纳秒 策略:通过使用非正规源操作数来命中 x87 FP 微代码辅助路径。竞争者:Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz fldl subnorm; 1e-310:值 < DBL_MIN,有偏指数 = 0 faddl subnorm ;源不正常 → FP 微码辅助 分数:677 个周期 时间:249 纳秒 策略:将锁定前缀操作数与跨缓存行边界对齐,迫使 CPU 断言外部总线锁定,而不是使用快速 MESI 缓存一致性路径。竞争者:Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz; split_ptr % 64 == 63 — 双字跨越字节 63(第 N 行)和 64–66(第 N+1 行) lock xaddl % r9d , (% rdi ) 分数:865 个周期 时间:319 纳秒 策略:使用次正规除数,
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱