Answers:
通常,如果自变量位于流水线各个阶段的寄存器中,则每个操作也需要一个时钟周期来执行。
延迟是什么意思?一个操作在ALU中花费多少个周期?
您可能会发现此表很有用:http : //www.agner.org/optimize/instruction_tables.pdf
由于现代处理器是超标量的,并且可以无序执行,因此您经常可以获得超过1的每个周期的总指令。宏命令的参数是最重要的,但是操作也很重要,因为除法比XOR(<1周期延迟)。
如果许多x86指令很复杂(例如REP命令或更糟糕的MWAIT),则可能需要多个周期才能完成某些阶段。
div
和idiv
)更是雪上加霜:它的微代码,以及很多高延迟小于add
或者shr
,甚至不会完全在任何CPU流水线。所有这些都直接来自Agner Fog的说明表,因此将其链接起来是一件好事。
在当今乱序执行的超级标量管道中,计算汇编代码的效率并不是最好的方法。根据处理器类型的不同而不同。前后的说明会有所不同(您可以添加额外的代码,有时使其运行得更快!)。某些操作(尤其是除法)甚至在较旧且更可预测的芯片上也可能具有一定的执行时间范围。实际上,进行大量迭代的时间是唯一的方法。
您可以在intel软件开发人员手册中找到有关intel cpu的信息。例如,对于整数加法,等待时间为1个周期,对于整数乘法,等待时间为3个周期。
我不知道乘法,但是我希望加法总是需要一个周期。