每个x86指令的能耗



我知道一些测量程序功耗的工具,如powerTOP、RAPL等。

然而,我想知道是否存在某种基准,比如Agner Fog的CPU基准https://www.agner.org/optimize/instruction_tables.pdf哪个测量每个指令的能耗

假设我有以下说明

movq    %rdi, -8(%rbp)
movq    %rsi, -16(%rbp)
movq    -8(%rbp), %rdx
movq    -16(%rbp), %rax
cmpq    %rax, %rdx
setb    %al

并且我只希望查看诸如movqcmpqsetb之类的指令来估计程序的功耗。我使用的是英特尔i5 10400处理器,但我可能正在寻找不同微体系结构的更广泛基准
这可能吗?

与存储转发相比,无序的执行和缓存访问可能会耗费大量精力。通过为每个操作码和寻址模式分配1个数字,无法有效地对功率进行建模CPU未休眠的每个周期的功耗都明显高于整数ALU执行单元,因此需要对性能进行建模。

还有许多其他因素,比如uop缓存命中率降低了前端的能耗。(传统解码耗费电力。(IDK ROB或RS是几乎满了还是几乎空了有多重要;我可以想象,一个几乎空的RS扫描准备执行的指令更便宜。请参阅中的单个核心的框图https://www.realworldtech.com/haswell-cpu/6/并注意到除了执行单元之外还有多少东西。

"争分夺秒";是一个关键概念:更高效的代码可以更快地完成,让整个核心回到睡眠状态。

相关:

  • 在预测现代超标量处理器上的操作延迟时需要考虑哪些因素,以及如何手动计算它们
  • http://www.lighterra.com/papers/modernmicroprocessors/是必不可少的阅读
  • https://en.wikichip.org/wiki/File:Intel_Architecture,_Code_Name_Skylake_Dep_Dive_A_New_Architecture_to_management_Power_Performance _and_Energy_Efficiency.pdf-IDF2015关于电源管理和效率的演讲幻灯片中有很多关于Skylake频率/电压注意事项的详细信息,但在不同的电压/频率水平下,不同事物的相对功率可能非常相似。除了在较低电压下,静态功率(泄漏电流(在总功率中所占比例较大

这并不意味着不可能说任何东西,不过:

每个周期的能量确实随着IPC而增加(更多的执行单元处于活动状态,更多的逻辑将uop调度到执行单元,并绕过将结果转发到物理寄存器(。

但在不同的指令之间,不同的ALU uop之间可能没有什么区别,比如setccsubcmpsubcmp实际上是相同的ALU运算,只是cmp只写FLAGS,而sub也写整数寄存器。整数物理寄存器文件项可以同时保存整数值reg和同一指令产生的FLAGS,这作为设计选择是有意义的,因为大多数x86整数指令都写FLAGS。

一些标量整数ALU指令可能会使用更多的能量,如imul,以及可能仅在端口1上运行的其他一些3周期延迟指令(popcntpdep,可能lzcnt/tzcnt(。IDK桶形移位器相对于加减法器的效率,但64位移位可能会使用更多。

当你执行更多的后端uop时,我预计会有所不同,例如,内存源为前端和ROB添加解码到微融合的uop,但在RS中,它是单独加载和添加执行端口的uop。(微融合和寻址模式(

不同形式的mov(加载、存储、reg到reg(显然非常不同,mov消除有助于一些32或64位的reg-reg移动。

SIMD是一些指令真正开始消耗更多能量的地方

特别是当SIMD乘法器处于活动状态时。像您这样的Skylake系列CPU的最高功率工作负载是每个时钟2个256位的FMA,可能会发生一些缓存命中加载/存储,例如作为内存源操作数。(例如Prime95压力测试(。

在不同的1周期延迟整数ALU指令之间,可能差别很小,如果每个周期执行相同数量的指令,则可能无法测量。当然,像您所展示的反优化调试构建充满了存储/重新加载瓶颈,这些瓶颈会扼杀IPC。

相关内容

  • 没有找到相关文章

最新更新