我不知道为什么阿格纳在他的电子表格中将一些单元格留空。我认为这些都是手工输入的,因为至少有几个相当明显的拼写错误,例如,5
而不是0.5
某些东西的吞吐量(内存源vinserti128或其他东西,IIRC)。
解释是,除了从 CPU 通常如何工作中推断出的信息之外,没有任何信息。即通常有一个单独的负载微指令为 ALU 微指令提供数据,并且通常与寄存器源使用相同的 ALU 微指令。但有些指令可以使用广播加载,例如vpsrld
具有内存源移位计数的 Skylake(低元素适用于所有指令)看起来它使用广播加载微指令而不是通常的 ALU 洗牌来提供可变移位微指令(例如vpsrlvd
1 p01 的 uop)。
对于具有多个输入的多微指令指令,Agner 仍然只列出了 1 个延迟数字。这不是一幅完整的图画;有时第一个 uop 仅需要一个输入,因此延迟来自a -> result
> b -> result
。例如他列出了vpsrld
(SKL 上的 p01 p5 为 2 uops)列为 1c 吞吐量/1c 延迟。显然不可能两个输入都为 1c。据推测,Agner 测量了数据输入 -> 输出延迟,并且移位计数的广播偏离了关键路径。(我推断 p5 微指令正在做什么,因为它只是 p5:随机端口。并且 SKL 有 1 个微指令可变计数移位。并且不需要移位计数根据记忆。明显的结论是它是广播随机播放或加载。)
要获取更完整的延迟数据,请参阅https://www.uops.info/table.html
\n\n它具有以下完整的延迟细分pext r64, r64, m64
:
\n\n\n\n
\n- 测量:延迟:\n \n
\n\n
- 延迟操作数 2 \xe2\x86\x92 1: 3
\n- 延迟操作数 3 \xe2\x86\x92 1(地址):8
\n- 延迟操作数 3 \xe2\x86\x92 1(内存):\xe2\x89\xa47
\n
到目前为止,他们主要只有 Intel CPU(也有 Zen),但数据来自自动化测试,并分别测试每个输入到每个输出。还列出了 IACA 数据。 对于每条指令的每种形式,都有一个指向其详细测试结果的链接。
\n\n此外,他们对多 uop 指令的 uop 细分更加小心,例如movbe r64, m64
不是 2p0156 + p23,而是 p06 p15 p23(就像bswap r64
Agner 确实正确的那样)。
归档时间: |
|
查看次数: |
197 次 |
最近记录: |