这是上的一篇文章的翻译。这个网站主要是一些cpu体系结构,指令级,优化相关的描述以及测试结果类似的文章,本人觉得相当不错。尤其相对于cpu设计,编译器设计,汇编语言编程等人员有很大价值。
cpu微体系结构的文档很少,甚至有些官方压根就没有放出来,也可能我一直找不到。我毕业后一直从事嵌入式软件开发的偏低层性质的工作,密集计算的场景也牵扯很少,所以一直也没有接触指令级优化的机会。以前自己以为个人发展会是向着分析师或架构师靠拢。后来发现其实自己的兴趣其实还是在偏低层和硬件相关的领域。于是业余时间分析自己的c代码,通过汇编和反汇编来研究代码的执行情况和效率。网上搜索资料的时候,发现了Agner的blog,感觉那是相当的不错。于是边学习边翻译,希望更多的人可以看到
自己专业不是cpu、编译器设计工相关作,所以理解上肯定有不全面或者错误的地方,欢迎大家提出来。我只翻译intel相关的部分,amd和via相关的没有进行,也不知道自己究竟能翻译多少,我会挑着翻译,尽量多翻译一些。翻译工具很大程度借助于internet、google和baidu,下面进入正文。
1 简介
1.1 关于本手册
这是5个手册系列中的第三个,另外全部的五个手册如下:
1. Optimizing software in C++: An optimization guide for Windows, Linux and
Mac platforms.
2. Optimizing subroutines in assembly language: An optimization guide for x86
platforms.
3. The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for
assembly programmers and compiler makers.
4. Instruction tables: Lists of instruction latencies, throughputs and
micro-operation breakdowns for Intel, AMD and VIA CPUs.
5. Calling conventions for different C++ compilers and operating systems.
这些手册的最新版本,你可以从获得,版权状况描述如下:
该系列五本手册的版权归Agner Fog所有。 不允许公开分发和镜像。 出于教育目的,允许非公开分发给有限的受众。 可以不受限制地使用这些手册中的代码示例。 我去世后,共同性公共许可CC-BY-SA将自动生效。
不知道我的一部分翻译是否满足agner fog的版权要求,但是就当出于教育和学习目的,让部分人员可以看到吧,希望agner可以理解。
本手册详细介绍了Intel和AMD的x86微处理器的微体系结构。 不包括安腾处理器在内。 本手册主要针对汇编程序员和编译器制造商,使得程序员或者编译器可以对特定微处理器的软件进行优化。 主要焦点只集中在一个方面,那就是计算执行一段代码所需时间的细节,例如不同执行单元的延时以及流水线各部分的吞吐量,另外也详细介绍了分支预测算法。
cpu微体系结构的学生对本文可能也很感兴趣。 但是必须注意,技术描述部分几乎全部是基于我自己的研究,这些研究仅限于可测量的一些内容。 因此可以说,由于仅限于通过对时钟周期或微操作(μop)计数来测量的结果,以及从这些测量结果中得出的结论,所以对流水线的整体描述比较机械死板。 最后在提示一下,本手册中的“机械”说明应被视为可用于预测微处理器行为的模型。 我无法确定是否符合微处理器的实际物理结构。 提供这些信息的主要目的是使程序员和编译器制造商能够优化其代码。另一方面,我的方法是从测量中推导出结论信息,而不是完全依靠微处理器供应商发布的信息,这种方法可以为大家提供许多其他地方都找不到的新信息和新视角。而微处理器供应商发布的技术细节通常是肤浅的,不完整的,选择性的,有时甚至是令人误解的。
我发现有时我的结果与微处理器供应商发布的数据不一致。造成这种差异的原因可能是微处理器供应商提供的这些数据是理论数据,而我的数据是在特定测试条件下通过实验获得的。 我并不能保证本手册中的所有信息都是准确的。 因为某些时序可能很难或无法准确衡量,而且我也无法获得微处理器供应商基于其技术手册进行的技术实现的所有内部信息。
测试主要是在32位和64位保护模式下进行的。 大多数时序结果与处理器模式无关。 在有些地方还是有重要的区别。 远距离跳转,远距离调用和中断大多也已针对较旧的处理器进行了16位模式的测试。 但是(call gate)调用门等尚未经过测试。 详细的时序结果参考手册4:“指令表”。
本手册中的大多数信息都是基于我自己的研究。 许多同道中人向我提供有用的信息和更正,对此我非常感谢。 当有新的重要信息变动时,我会随时同步更新手册。 因此,本手册比其他地方信息来源更加全面、详尽和准确; 它包含许多其他地方都找不到的细节。
本手册不适用于初学者。 本手册假定读者对汇编编程和微处理器体系结构有很好的理解。 如果没有,请在进行复杂的优化之前先阅读一些有关该主题的书并获得一些编程经验。 请参见手册2:“使用汇编语言优化子例程”中的文献列表,或访问中的链接。
读者可以跳过旧微处理器描述的章节,除非您在嵌入式系统中使用这些处理器,或者对微体系结构的历史发展感兴趣。
阅读(1199) | 评论(0) | 转发(0) |