返回

文章详情

shame大会

Hacker News2026年8月7日 18:01

shame大会概述 指令延迟分析通常专注于性能优化——使代码尽可能快地运行。 shame大会采取相反的做法:寻找单指令性能的绝对底线。 🏆 当前冠军 🏆 x86 : fxrstor64 策略 : 使用 fxrstor64 从 PCIe 结构中的高延迟 MMIO 区域加载 512 字节的 FPU/MMX/XMM 状态,然后在加载进行中的时候耗尽结构——一群 hammer 核心用紧凑的 4 字节读写攻击不同的高延迟 MMIO 寄存器,使 PCIe 根复合和端点充斥着未发布的事务,因此 CPU 0 的 512 字节 fxrstor64 必须在所有竞争流量后排队。 竞争者 : AMD Ryzen 7 5800H ; CPU 0 — 定时指令 movl $ 0xfcc68830 , % rsi fxrstor64 % rsi ; CPUs 1..N — 对不同的高延迟位置进行 hammer 循环 movl 0xfcc68858 , % eax 🏆 分数 : 198,002,498,236 cycles 🏆 时间 : 62 seconds 荣誉提名 一个违反规范的未对齐 ymm0 加载,强制 stalled GPU 寄存器发出未发布的 dword 事务,被用于打破系统管理模式在 smiiiiiiiiiiiiiiii 中的基本设计。 vmovdqu 0xfcc003b1 , % ymm0 规则 指令可以使用任何必要的设置,但只有一条指令有资格得分。 陷阱/仿真/虚拟化指令只能记录陷阱时间,而不是处理程序。 指令不得可中断。 rep movs , pause , 等等都不合格。 时间基于 CPU 基准时钟频率进行归一化。 所有平台必须保持其出厂库存配置 - 不得进行硬件修改。 x86 排行榜 27. nop 策略 : nop 什么也不做。 它相应地打开了排行榜。 竞争者 : Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz nop 分数 : 1 cycles 时间 : 0 纳秒 26. nop16 策略 : 常规 nop 太短了,但我们如何让什么都变得更长呢? 尝试一个长长的 nop。 竞争者 : Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz data16 data16 data16 data16 data16 data16 data16 nopl 0x00000000(%%eax,%%eax,1) 分数 : 20 cycles 时间 : 7 纳秒 25. rdtsc 策略 : 仅仅是一个参考指令来确定我们的基准。 竞争者 : Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz rdtsc 分数 : 49 cycles 时间 : 18 纳秒 24. idiv 策略 : 使用 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 cycles 时间 : 28 纳秒 23. enter 策略 : 使用最大嵌套深度(31)强制 30 个显示指针加载和推送通过微码显示遍历路径。 竞争者 : Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz enter $ 0 , $ 31 ; 分配 0 字节,嵌套深度 31(最大)分数 : 112 cycles 时间 : 41 纳秒 22. fldl 策略 : 尝试一个小的非规范数以触发 FP 微码支持。 竞争者 : Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz movabsq $ 0x0000000000000001 , % rax movq % rax , - 8 (% rsp ) fldl - 8 (% rsp ) 分数 : 133 cycles 时间 : 49 纳秒 21. clflush 策略 : 只需确保缓存行是脏的。 竞争者 : Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz clflush (% rax ) ; rax -> 脏缓存行驻留在 L3 分数 : 165 cycles 时间 : 60 纳秒 20. fsin 策略 : 使用指数 0x7ff 以达到“特殊值”处理在微码中; 正/负,NaN/无穷似乎没有区别,选择 QNaN。 竞争者 : Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz movabsq $ 0x7fffffffffffffff , % rax movq % rax , - 8 (% rsp ) fldl - 8 (% rsp ) fsin 分数 : 257 cycles 时间 : 94 纳秒 19. mfence 策略 : 用 movnti 存储 saturate 所有写合并行装填缓冲区到不同的缓存行,迫使 mfence 在退役之前排出所有 LFB 写路径。 竞争者 : Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz movnti % r9 , 0 * 64 (% rdi ) ; ×16 个不同的缓存行 - saturate 写合并 LFB; … movnti % r9 , 15 * 64 (% rdi ) mfence ; 在退役之前必须排出所有待处理的 LFB 写入分数 : 326 cycles 时间 : 120 纳秒 18. mov cr3 策略 : 现在什么都不用做,只需检查使 TLB 无效的时间。 竞争者 : AMD Ryzen 7 5800H with Radeon Graphics (Trigkey S5) mov % rax , % cr3 分数 : 352 cycles 时间 : 110 纳秒 17. fadd 策略 : 通过使用非规范源操作数来击中 x87 FP 微码辅助路径。 竞争者 : Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz fldl subnorm ; 1e-310: value < DBL_MIN, biased exponent = 0 faddl subnorm ; 源是非规范 → FP 微码辅助分数 : 677 cycles 时间 : 249 纳秒 16. split lock 策略 : 对齐锁定 - 前缀操作数以跨越缓存行边界,迫使 CPU 断言外部总线锁,而不是使用 t

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡