Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly x86操作码对齐参考和指南_Assembly_X86_X86 64_Memory Alignment_Micro Optimization - Fatal编程技术网

Assembly x86操作码对齐参考和指南

Assembly x86操作码对齐参考和指南,assembly,x86,x86-64,memory-alignment,micro-optimization,Assembly,X86,X86 64,Memory Alignment,Micro Optimization,我正在JIT编译器中动态生成一些操作码,并寻找操作码对齐的指导原则 1) 我读过一些评论,这些评论通过在通话后添加NOP来简短地“推荐”对齐方式 2) 我还读过关于使用nop优化并行序列的内容 3) 我已经读到ops的对齐有利于“缓存”性能 通常这些评论不会提供任何支持性参考。阅读一篇博客或评论,上面写着“做这样那样的事情是个好主意”,这是一回事,但实际编写一个编译器,实现特定的操作序列,并在线实现大多数材料,尤其是博客,对于实际应用来说是没有用的,这又是另一回事。所以我相信自己会发现一些东西(

我正在JIT编译器中动态生成一些操作码,并寻找操作码对齐的指导原则

1) 我读过一些评论,这些评论通过在通话后添加NOP来简短地“推荐”对齐方式

2) 我还读过关于使用nop优化并行序列的内容

3) 我已经读到ops的对齐有利于“缓存”性能

通常这些评论不会提供任何支持性参考。阅读一篇博客或评论,上面写着“做这样那样的事情是个好主意”,这是一回事,但实际编写一个编译器,实现特定的操作序列,并在线实现大多数材料,尤其是博客,对于实际应用来说是没有用的,这又是另一回事。所以我相信自己会发现一些东西(反汇编等,看看真实世界的应用程序会做些什么)。这是一个我需要一些外部信息的案例


我注意到编译器通常会在之前的指令序列之后立即启动奇数字节指令。因此,在大多数情况下,编译器不会特别小心。我在这里或那里看到“nop”,但通常情况下,nop似乎很少使用,如果有的话。操作码对齐有多重要?您能为我实际用于实施的案例提供参考吗?谢谢。

所有这些微优化的最佳来源是。这些文档应该包含您需要的所有内容,然后是一些。:)


我能想到的一件事是对齐一个循环,这样循环代码就不会跨越任何缓存线边界,即循环小于64字节,从一个可被64整除的地址开始。然后,整个循环将适合于单个缓存线,并为其他事情保留更多的缓存线。不过,我怀疑这在现实世界的程序中是否重要,不管这个特定循环有多“热”。

我建议不要插入NOP,除非分支目标对齐。在某些特定的CPU上,分支预测算法可能会惩罚控制传输到控制传输,因此nop可能能够充当标志并反转预测,但在其他方面它不太可能有帮助

不管怎样,现代CPU将把ISA操作转换成。这可能会降低经典对齐技术的重要性,因为微操作转码器可能会忽略NOP,并改变秘密真实机器操作的大小和对齐方式

然而,出于同样的原因,基于第一原则的优化应该不会造成什么伤害

理论上,通过在缓存线边界开始循环,可以更好地利用缓存。如果一个循环是在缓存行的中间开始的,那么高速缓存行的前半部分将不可避免地被加载并在循环期间被加载,如果循环比缓存行的1/2长,这将在缓存中浪费空间。 此外,对于分支目标,当目标对齐时,缓存线的初始加载将加载指令流的最大前向窗口


关于用NOP分离不是分支目标的内联指令,在现代CPU上这样做的理由很少。(曾经有一段时间RISC机器有,这通常导致在控制传输后插入NOP。)解码指令流很容易通过管道传输,如果一个体系结构有奇数字节长度的ops,您可以确保它们被合理解码。

+1感谢另一个好答案。是的,我刚刚从马丁的链接上读到了关于微操作和重新排序的内容。作为一个独立的回答,我接受了DigitalRoss,但两者都很好。马丁提供的链接被证明是最有用的(一个真正的金矿),今晚回答了我很多后续问题。谢谢你们两位。