Intel, AMD及VIA CPU的微架构(1)

Intel, AMD及VIA CPU的微架构

对x86平台的优化指引

对汇编程序员及编译器作者的优化指引

作者:Agner Fog。TechnicalUniversity of Denmark

1.      介绍

1.1.      关于本手册

这是五本手册系列中的第三本:

1.      优化C++软件:对Windows,Linux及Mac平台的优化指引。

2.      优化汇编例程:对x86平台的优化指引。

3.      Intel, AMD及VIA CPU的微架构:对汇编程序员及编译器作者的优化指引。

4.      指令表:Intel, AMD及VIA指令时延,吞吐率及微操作分解的列表。

5.      不同C++编译器及操作系统间的调用惯例。

可以从www.agner.org/optimize得到这些手册的最新版。版权声明如下(原文在第25章):

本系列手册的版权为AgnerFog所有。不允许公开发行与抄袭(mirroring)。但允许对有限受众,出于教育目的非公开发行。这些手册中的样例代码可以自由使用。在我死后,GNUFree Document License将自动生效。参考www.gun.org/copyleft/fdl.html

当前的手册(2017)描述了Intel及AMD x86微处理器的微架构细节。不涉及Itanium处理器。本手册的目的是使汇编程序员及编译器作者能针对特定的微处理器优化软件。主要关注与一段代码执行所需时间相关的细节,比如不同执行单元的时延及流水线各部分的吞吐率。分支预测算法也被深入讨论。

微架构的学生对本手册也会有兴趣。但必须注意技术描述大多基于我自己的探索,局限于可测量部分。因此,流水线“机制”的描述局限于能够通过计算时钟周期或微操作测量的部分,以及可以从这些测量推测的部分。本手册中的技术性解释应该被视为预测微架构行为有用的模型。我没有办法确切知道它是否符合微架构的实际物理结构。提供这个信息的主要目的是使程序员及编译器作者可以优化代码。

另一方面,我从测量推导信息,而不是依赖于微处理器厂商公开的信息,提供了许多在别处找不到的新信息。微处理器厂商公开的技术细节通常是表面的,不完整的,有选择性的,有时是有误导的。

我的发现有时与微处理器厂商发布的数据不一致。这个矛盾的原因可能是,这样的数据是理论值,而我的数据是在特定一组测试条件下获得的实验值。我不声明本手册中所有的信息是精确的。有些时序很难或不可能精确测量,而且我无法得到微处理器厂商技术手册所基于的技术实现的内部信息。

测试主要在32位及64位保护模式下完成。大多数结果与处理器模式无关。在合适处,重要的区别会被标注。对更旧的处理器,远程跳转、远程调用与中断主要在16位模式下完成。调用门等,没有测试。详细的时序结果在手册4“指令表”中列出。

本手册中大多数信息基于我自己的研究。许多人给了我有用的信息与纠错,我非常感谢。只要我得到新的重要信息,我就会更新手册。因此,本手册比其他信息来源更详细、完备以及准确;并且它包含了许多别处没有的细节。

本手册不适合初学者。它假定读者熟悉汇编及微处理器架构。如果没有,在你开始进行复杂的优化前,请阅读关于这个主题的一些书,并获取一定的编程经验。参考在手册2:“优化汇编例程”中列出的文献,或者访问www.agner.org/optimize里的链接。

读者可以跳过描述旧微处理器设计的章节,除非你在嵌入式系统里使用这些处理器,或者你对微处理器的发展历史感兴趣。

请不要将你的编程问题发送给我,我不会帮你做你的家庭作业!如果你在相关的书籍及手册里找不到答案,你可以在互联网上有各种各样的论坛里找到答案。

1.2.      本手册涵盖的微处理器版本

以下是本手册讨论的x86微处理器家族:

微处理器

微架构代码

缩写

Intel Pentium(没有名字后缀)

P5

P1

Intel Pentium MMX

P5

PMMX

Intel Pentium Pro

P6

PPro

Intel Pentium II

P6

P2

Intel Pentium III

P6

P3

Intel Pentium 4 (NetBurst)

Netburst

P4

带有 EM64T, Pentium D等的Intel Pentium 4

Netburst, Prescott

P4E

Intel Pentium M, Core Solo, Core Duo

Dothan, Yonah

PM

Intel Core 2

Merom, Wolfdale

Core2

Intel Core i7

Nehalem

Nehalem

Intel第二代Core

Sandy Bridge

Sandy Bridge

Intel第三代Core

Ivy Bridge

Ivy Bridge

Intel第四代Core

Haswell

Haswell

Intel第五代Core

Broadwell

Broadwell

Intel第六代Core

Skylake

Skylake

Intel Atom 330

Diamondville

Atom

Intel Bay Trail

Silvermont

Silvermont

Intel Xeon Phi 7210

Knights Landing

Knights Landing

AMD Athlon

K7

AMD K7

AMD Athlon 64, Opteron, etc., 64-bit

K8

AMD K8

AMD Family 0x10, Phenom, 第三代Opteron

K10

AMD K10

AMD Family 0x15, Bulldozer

Bulldozer

Bulldozer

AMD Family 0x15, Piledriver

Piledriver

Piledriver

AMD Family 0x15, Steamroller

Steamroller

Steamroller

AMD Family 0x17, Ryzen

Zen

Ryzen

AMD Bobcat

Bobcat

Bobcat

AMD Kabini, Temash, etc.

Jaguar

Jaguar

VIA Nano, 2000 series

Nano 2000

VIA Nano, 3000 series

Isaiah

Nano 3000

表1.1 微处理器家族

这里的缩写是为了区分不同的微架构内核,不管商品名是什么。微处理器的商品名通常会混淆不同核心技术见的差异。名字Celeron用于缓存比标准版本少的P2及后续处理器。名字Xeon用于缓存比标准版本多的P2及后续高端处理器。名字PentiumD与PentiumExtreme Edition指多核的P4E。商标Pentium最早用于P5及P6微架构,但后来相同的名字被用于一些具有更新微架构的处理器。名字Centrino用于PentiumM,CoreSolo及CoreDuo处理器。CoreSolo与PentiumM相当相像。CoreDuo也像,但有两个核。

在Intelx86微处理器系列里,P1与PMMX是第五代处理器,它们的处理器内核非常相像。PPro,P2与P3都有第六代内核(P6)。这三个处理器几乎一样,除了每个新型号中添加了新指令。P4是第七代中的第一个处理器,在Intel文档里,出于掩盖的目的,不称第七代。相当意外,在P4里CPUID指令返回的家族号不是7而是15。后续的IntelCPU:PentiumM,Core及更新的Intel处理器都报告号码6,可能是为了与遗留的Intel软件兼容。当Intel从Core处理器重新开始世代编号时,混乱结束了。

名字Sempron用于更少缓存的Athlon64低端版本。Turion64是移动版本。Opteron是带有更多缓存的服务器版本。Intel与AMD处理器更新的世代都有不同核数的不同版本。

读者应该意识到不同的微处理器世代行为非常不一样。同样,Intel与AMD微架构也差异很大。对一个世代或品牌最优,对其他未必最优。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值