← Back to Index

我们经常需要了解一个指令典型的执行时间,下面提供了两种方式来查询 image.png

==1, 通过查看PDF文档 x86指令速查== ==2, 另一个在线的文档也可以查询: instlatx64 (atw.hu)==

下面展示的是PDF文档中表格的格式: > [!NOTE] 省时! > 如果只关注指令执行时间,那么Latency 是你需要关注的列

  1. Instruction (指令): 这一列列出了具体的汇编指令,这里都是MOV指令,也就是数据传输指令。
  2. Operands (操作数): 这一列表示指令的操作数类型。例如,r,i表示一个寄存器和一个立即数,r8/m表示一个8位寄存器或内存位置等。
  3. uops fused domain (微操作数 - 融合域): 这一列显示了执行这个指令时,在处理器的融合域内生成的微操作数(uops)数量。融合域是指处理器的一个阶段,其中多个微操作数可以融合成一个。
  4. uops unfused domain (微操作数 - 非融合域): 这一列显示了在非融合域内生成的微操作数数量。在非融合域中,每个微操作数单独处理。
  5. uops each port (每个端口的微操作数): 这一列显示了微操作数通过处理器的不同执行端口(如p0156p23p237等)执行的情况。处理器通常有多个执行端口,并行处理不同的微操作数。
  6. Latency (延迟): 这一列显示了指令的延迟时间,以时钟周期为单位。延迟是指从指令发出到其结果可以被后续指令使用的时间。
  7. Reciprocal throughput (逆吞吐量): 这一列显示了指令的逆吞吐量,即执行一次该指令平均需要的时钟周期数。数值越小,吞吐量越高。
  8. Comments (备注): 这一列包含对指令的额外说明。例如,有些指令可能在特定条件下被消除(eliminated)。

这些列的信息可以帮助程序员和系统架构师了解处理器如何执行特定的指令,进而进行代码优化。

如果你想知道一个指令的执行时间,你应该关注 Latency 这一列。

因此,对于单条指令的执行时间,Latency 是你需要关注的列。