| |
技术:Intel Core架构vs AMD K8架构 |
|
2006年06月26日 00:35 AnandTech
|
引言
编者注:五月一日,就在我们开始享受五一长假的时候,AnandTech 网站发布了这篇关于 Intel Core 微架构的《Intel Core versus AMD's K8 architecture》一文。与我们先前发布的《Intel Core 微架构全面解析》一文相比,这篇文章关注的焦点是 Core 微架构与 K8 处理器的对比。并且,该篇文章的作者是在访问过 Intel 以色列设计团队的架构设计师 Jack Doweck 之后撰写该文的,应该说文章中的一些说法具有一定的权威性。因此,尽管文章的内容与我们之前发布的文章有一些交叉,我们还是把全文转载过来,供广大读者参考。
宽动态执行(Wide Dynamic Execution),高级数字多媒体增强技术(Advanced Digital Media Boost),智能内存访问技术(Smart Memory Access),高级智能缓存技术(Advanced Smart Cache)——这些都是 Intel 的市场部人员重点宣传的技术,所有的这些技术造就了 Intel 新推出的高性能、低功耗的 Core 微架构。
不过,我们不会只关心市场宣传人员给他们的产品贴上的漂亮的标签。如果只看标签的话——“结合良好的性能与合理的功耗,扩展数字生活的方式”,你会发现这与 VIA 对他们的 C7 处理器的宣传很相似。然而,你认为宣传口号背后的 Intel Core 微架构会与 VIA C7 处理器相同吗?
下面,就让我们来仔细了解一下隐藏在市场宣传人员的口号背后的 Core 微架构的秘密,并且与 AMD 的 K8 微架构、Intel 之前的 NetBurst 微架构以及 Pentium M 处理器进行对比。撰写这篇文章之前,我们与 Intel 以色列研发中心(Israel Development Center,简称IDC)的架构设计师之一——Jack Doweck 进行了交流。Jack Doweck 设计了全新的内存乱序缓冲区(Memory Reorder Buffer)和内存相关性预测系统(Memory disambiguation system)。
Intel 的市场宣传人员声称 Core 微架构是 Pentium M 处理器和 NetBurst 微架构的融合。然而目前比较普遍的看法是,Core 微架构是 Pentium Pro 架构,或者说是 P6 微架构的延续。在 Core 微架构中,你很难找到任何与Pentium 4,或者说是 NetBurst 微架构有关的东西。在我们与 Jack Doweck 的交谈之后,这个事实更加清晰——Core 微架构中只有预取机制是从 NetBurst 微架构获得的灵感,所有其它的设计都是从 Yonah 微架构(Core Duo 处理器)演变而来,而 Yonah 微架构显然是从 Banias 处理器和 Dothan 处理器演变而来的。所有 Banias、Dothan、Yonah和采用 Core 微架构的处理器都继承了 NetBurst 处理器的前端总线设计,但除此之外,它们毫无疑问都是曾经获得巨大成功的 P6 微架构的后代。在某种意义上,你可以把 Core 微架构叫做“P8 微架构”,因为 Banias 和 Dothan 处理器曾经被称作“P7 微架构”。(不过,需要注意的是,Intel 从未给出过 Banias 和 Dothan 处理器所采用的微架构的正式名称,我们一般用 Pentium M处理器代表它们,或者简称为 PM 处理器。)
不过这并不意味着 Intel 的工程师只是把 Yonah 处理器的一些功能单元和解码器重新包装一下然后换了个名字就推出来。Jack 告诉我们,Woodcrest、Conroe 和 Merom 处理器都是基于 Yonah 处理器的,但是几乎80%的架构和电路设计需要重新进行。
为使那些不熟悉处理器设计的读者也能理解文章后面的内容,我们首先从一个处理器微架构的速成教程开始。为了理解处理器设计的目标和优劣,你首先需要了解处理器执行的指令,所以我们从处理器运行的软件开始。
典型的 X86 程序的代码中大约有50%的指令是存储器访问指令,其中存储器读指令大约是存储器写指令的2倍。然后,大约15%到20%的指令是分支指令(if, then, else等)。剩余指令中,大部分是诸如“ADD”、“MUL”这样的较简单的计算指令。像“DIV”、“SQRT”这些较复杂的计算指令在所有指令中只占很少的一部分。所有这些指令都按照典型的流水线步骤执行:取指,解码,取操作数,执行,退出。
首先,处理器会根据指令指针寄存器(instruction pointer register)指示的地址取回指令。这时,对处理器来说,指令仅仅是一些没有意义的0、1字符串。只有在被解码之后,指令对处理器来说才开始有意义。指令被解码后可以得到操作数地址和操作码,而操作数地址可以在下一步发挥作用:取操作数。你不会希望处理器对操作数的地址进行计算,而是对那些地址里面存放的内容进行计算——与 C 语言里面的指针的概念很相似。当操作数被取出来以后,ALU根据操作码的指示,就可以对操作数进行正确的计算了。计算结果一般将被写回处理器内部的寄存器堆中。有时候,计算结果也需要写回到缓存和内存中。这就是最后的步骤——退出。到此为止,你应该略微了解一条指令的整个执行过程了。
今天,对处理器设计者来说,主要的挑战是处理器的存储器访问平均延迟。在一个由 Pentium 4 3.6GHz 和 DDR400 内存构成的系统中,处理器的速度是内存的速度(200MHz)的18倍。也就是说,访问内存的每一个周期,处理器会经过18个周期。而且,发送一个内存访问请求需要多个内存周期,回应一个内存访问也需要多个周期。因此,对于 Pentium 4 来说,花费200到300个处理器周期来等待内存访问的完成并不罕见。设计处理器缓存的目标就是避免内存访问的发生。但即使处理器缓存的缺失率仅为4%,也就是说,在处理器访问存储器的所有情况中只有4%的比例需要访问内存,这4%也将显著降低处理器的执行效率。
在处理器频率已经达到3GHz甚至更高的时代,保证即将用到的指令和数据已经在缓存中准备好是处理器设计者最重要的工作之一。因为只有这样,才能保证随着处理器频率的提高性能也随之提高;否则的话,更高的处理器频率只会使处理器花费更多的时钟周期来等待数据。这种把数据提前装入缓存的技术被称为“数据预取技术”(Prefeching)。但是,之前的处理器采用的数据预取技术并不能保证每次都成功,总会有一些失败的情况。这会导致处理器性能降低,特别是在运行对带宽敏感的应用程序的时候。
Core 微架构所采用的数据预取技术毫无疑问是目前为止最先进的,要优于 Pentium 4 和 Athlon 64 所采用的技术。Core 微架构中的每个核心至少有3组预取单元,包括2组数据预取单元和1组指令预取单元。除此之外,共享式二级缓存还拥有2组预取单元。这样,在一个双核心的采用 Core 微架构的处理器中,共有8组预取单元。有一个问题是,多达8组的预取单元在进行预取工作时,很容易会妨碍到正在运行的程序的正常的 load 操作。为了避免这种情况的发生,Core 微架构采取了预取监测器的机制,该监测器总会给予正在运行的程序更高的优先级。这样,预取单元就决不会从正在运行的程序那里“偷”走很多带宽了。
Core 微架构的预取机制还有更多新特性。数据预取单元经常需要在缓存中进行标签查找。为了避免引起正在运行的程序进行的标签查找的更高的延迟,数据预取单元使用标签查找的 store 端口。如果你还记得,load 操作的发生频率是 store 操作的2倍之多,那么就容易理解这样的选择了——store 端口的使用频率仅为 load 端口的一半。并且,store 操作在大多数情况下并不是影响系统性能的关键,因为在数据开始写入后,处理器可以马上开始进行下面的工作,而不必等待写入操作完成。缓存/内存子系统会负责数据的整个写入到缓存、复制到主内存的过程。
Core 微架构的缓存系统也令人印象深刻。二级缓存容量高达4MB,并且是由两个核心共享的,访问延迟仅12到14个时钟周期。每个核心还拥有32KB的一级指令缓存和一级数据缓存,访问延迟仅仅3个时钟周期。从 NetBurst 微架构开始引入的追踪式缓存(Trace Cache)在 Core 微架构中消失了。NetBurst 微架构中的追踪式缓存的作用与常见的指令缓存相类似,是用来存放解码前的指令的,对 NetBurst 微架构的长流水线结构非常有用。而 Core 微架构回归相对较短的流水线之后,追踪式缓存也随之消失,因为 Intel 认为,传统的一级指令缓存对短流水线的 Core 微架构更加有用。
|
| 共 4 页 1 [ 2 ][ 3 ][ 4 ] |
【推荐】【打印】【大 中 小】【关闭窗口】
|
|
|
|
 |
| 推荐:图片搜索 |
|