我正在尝试了解机器代码对齐的原理。我有一个汇编器实现,可以在运行时生成机器代码。我在每个分支目标上使用 16 字节对齐,但看起来这不是最佳选择,因为我注意到,如果我删除对齐,有时相同的代码会运行得更快。我认为这与缓存线宽度有关,因此某些命令会被缓存线切断,CPU 会因此而停滞。因此,如果在一个地方插入一些对齐字节,它会将指令移动到进一步通过缓存边界线的地方......
我希望实现一个自动对齐程序,它可以将代码作为一个整体进行处理,并根据CPU的规格(缓存线宽,32/64位等)插入对齐......
有人可以提供有关此程序的一些提示吗?例如,目标 CPU 可以是 Intel Core i7 CPU 64 位平台。
谢谢。
我没有资格回答你的问题,因为这是一个如此庞大和复杂的话题。除了缓存行大小之外,可能还有更多机制在起作用。
不过,我想向您指出阿格纳·福格的网站 http://www.agner.org/optimize/#manuals和优化手册 http://www.agner.org/optimize/optimizing_assembly.pdf for 编译器制造商 http://www.agner.org/optimize/microarchitecture.pdf你可以在那里找到。它们包含有关此类主题的大量信息 - 缓存行、分支预测和数据/代码对齐。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)