Assembly 指令表中缺少延迟
我目前正在研究Agner Fog,以了解常见指令的延迟 我希望我没有在文档中错过这个问题的答案,但是有人能向我解释为什么对于一些说明,没有延迟条目吗 例如,对于Skylake,带有操作数r、r、m的PEXT指令的延迟为空Assembly 指令表中缺少延迟,assembly,x86,micro-optimization,Assembly,X86,Micro Optimization,我目前正在研究Agner Fog,以了解常见指令的延迟 我希望我没有在文档中错过这个问题的答案,但是有人能向我解释为什么对于一些说明,没有延迟条目吗 例如,对于Skylake,带有操作数r、r、m的PEXT指令的延迟为空 对于丢失的延迟有什么解释?为什么首先很难获得延迟(如果是这样的话)?IDK为什么Agner在他的电子表格中留下一些空白单元格。我认为这些都是手工输入的,因为至少有两个相当清楚的输入错误,例如,对于某个吞吐量(内存源vinserti128或某个IIRC),输入的是5,而不是0.5
对于丢失的延迟有什么解释?为什么首先很难获得延迟(如果是这样的话)?IDK为什么Agner在他的电子表格中留下一些空白单元格。我认为这些都是手工输入的,因为至少有两个相当清楚的输入错误,例如,对于某个吞吐量(内存源vinserti128或某个IIRC),输入的是
5
,而不是0.5
这种解释是,除了从CPU通常的工作方式可以推断出的信息之外,没有其他信息。i、 e.通常有一个单独的加载uop供给ALU uop,它通常与寄存器源的ALU uop相同。但有些指令可以使用广播加载,例如,Skylakevpsrld
和内存源移位计数(低元素适用于所有)看起来像是使用广播加载uop而不是通常的ALU shuffle来馈送可变移位uop(如p01的vpsrlvd
1 uop)
对于具有多个输入的多uop指令,Agner仍然只列出1个延迟数。这不是一个完整的画面;有时,第一个uop只需要一个输入,因此a->result
b->result
的延迟。e、 g.他将vpsrld
(SKL上p01 p5的2个UOP)列为1c吞吐量/1c延迟。显然,这两种输入都不可能同时产生结果。据推测,Agner测量了数据输入->输出延迟,而移位计数的广播运行在关键路径之外。(我从只有p5的事实推断p5 uop在做什么:洗牌端口。SKL有1个uop变量计数移位。从内存中的移位计数不需要它。显而易见的结论是它是广播洗牌或加载。)
要获取更完整的延迟数据,请参阅 它有:
- 测量:延迟:
- 延迟操作数2→ 1:3
- 延迟操作数3→ 1(地址):8
- 延迟操作数3→ 1(内存):≤七,
movbe r64,m64
不是2p0156+p23,而是p06 p15 p23(如bswap r64
,Agner确实正确)