填充指令是否有任何实际好处

时间:2012-09-19 19:18:19

标签: performance assembly x86 padding

知道英特尔和AMD处理器以其本机字长(主要是64位)获取指令,我问我的兄弟,他说为了让处理器更高效地运行,一些汇编程序员将他们的指令填入如果下一条指令将字节长度设置为大于4或8字节,则带有nop s的32位:

xor ax, ax ; 2 bytes
nop ; 1
nop ; 1

这样做有什么好处吗?

2 个答案:

答案 0 :(得分:4)

在您的示例中没有理由使用nop指令。通常,指令对齐的唯一用途是最大化在控制流分支的目标处获取的指令的数量,例如,一个函数调用。现代x86提取和解码单元针对x86编码的可变长度特性进行了很好的优化。像这样的填充只会减慢速度。

扫描英特尔第4卷优化手册(可能已过期几年)没有提供填充指令的理由。

答案 1 :(得分:2)

是的,它可以显着提高AMD Bulldozer和Intel Atom的性能,并且在较小程度上可以提高Intel Core 2& Nehalem处理器。对于Bulldozer和Core 2在16字节边界上对齐,对于8字节边界上的Atom。但是,最好使用附加前缀或更长的指令形式而不是NOP。请注意,只有在需要超过峰值IPC的一半时,对齐指令才有意义。