不可否认,我有点傻问题。基本上,我想知道是否 英特尔处理器提供了一些有效的特殊机制 执行一系列虚拟指令,即NOP指令?例如,我可以想象那里 可能是某种识别NOPS的预取机制,丢弃它们 并尝试取代一些有用的指令。或者是这些NOPS派遣了 作为正常指令执行单元,这意味着我可以大致处理 每个循环5个循环(假设有5个执行单元)
谢谢, 莱因哈德
答案 0 :(得分:2)
丢弃它们将是一个非常糟糕的主意:它们通常用于忙碌等待。如果丢弃NOP
,则会使等待循环比应有的更紧密,并可能导致相当大的通信开销。
如果您觉得NOP
效率低下,可以尝试使用HLT
来节省一些能量。或者你甚至可以将CPU发送到睡眠状态。但是,如果你想在相当长的时间内“无所事事”和它们通常需要suvervisor权限,这些才有意义。
答案 1 :(得分:1)
没有。它们被解码并作为正常指令执行;有硬件支持来删除否则会在EAX寄存器中为单字节NOP,0x90(实际上是xchg eax, eax
)引入的错误依赖,但这就是全部。
参考:Intel(R) 64 and IA-32 Architectures Optimization Reference Manual - 第3.5.1.8节,“使用NOP”。
答案 2 :(得分:0)
在x86架构上几乎不需要优化无操作序列,因为它具有不同长度的无操作编码。可以使用单个多字节无操作,而不是许多单字节无操作。解码器的工作量稍微多一点,但实际的执行单元只能看到一条指令要执行。