细读ps3之cpube架构.docx

上传人:b****0 文档编号:9332727 上传时间:2023-05-18 格式:DOCX 页数:28 大小:355.95KB
下载 相关 举报
细读ps3之cpube架构.docx_第1页
第1页 / 共28页
细读ps3之cpube架构.docx_第2页
第2页 / 共28页
细读ps3之cpube架构.docx_第3页
第3页 / 共28页
细读ps3之cpube架构.docx_第4页
第4页 / 共28页
细读ps3之cpube架构.docx_第5页
第5页 / 共28页
细读ps3之cpube架构.docx_第6页
第6页 / 共28页
细读ps3之cpube架构.docx_第7页
第7页 / 共28页
细读ps3之cpube架构.docx_第8页
第8页 / 共28页
细读ps3之cpube架构.docx_第9页
第9页 / 共28页
细读ps3之cpube架构.docx_第10页
第10页 / 共28页
细读ps3之cpube架构.docx_第11页
第11页 / 共28页
细读ps3之cpube架构.docx_第12页
第12页 / 共28页
细读ps3之cpube架构.docx_第13页
第13页 / 共28页
细读ps3之cpube架构.docx_第14页
第14页 / 共28页
细读ps3之cpube架构.docx_第15页
第15页 / 共28页
细读ps3之cpube架构.docx_第16页
第16页 / 共28页
细读ps3之cpube架构.docx_第17页
第17页 / 共28页
细读ps3之cpube架构.docx_第18页
第18页 / 共28页
细读ps3之cpube架构.docx_第19页
第19页 / 共28页
细读ps3之cpube架构.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

细读ps3之cpube架构.docx

《细读ps3之cpube架构.docx》由会员分享,可在线阅读,更多相关《细读ps3之cpube架构.docx(28页珍藏版)》请在冰点文库上搜索。

细读ps3之cpube架构.docx

细读ps3之cpube架构

详细解读多核心Cell处理器

关键词:

多核  cell

阅读提示:

本文对Cell处理器的架构做了详细的介绍,在服务器领域,除了intel,amd提供的处理器以外,cell处理器也非常适合用作服务器的处理器。

采用Cell处理器的服务器适用处理对网络带宽有较高要求的多媒体等应用。

一、引言

请看几件非常有趣的事情:

1.由于Intel在关于它们的多核心微处理器构架的将来计划上变得比以前更公开了,Intel的SpringIDF2005变成了一个多核心CPU的节日。

Intel的计划中有10款以上的多核心CPU设计,而它们在IDF上解释得很清楚了。

2.在GDC2005上,AGEIA宣布它们已经开发了一个物理处理单元(PhysicsProcessingUnit,PPU),它能够被用于处理非常现实的物理及人工智能模型。

3.JohanDeGelas在他探索更高处理能力的道路上更进了一步,发现多核心CPU在游戏市场中有相当大的潜力,不过要以增加程序调试时间为代价。

那么,这三件事有什么共同之处呢?

三者的结合基本上概括了我们已经知道的关于Cell微处理器-多核心CPU的内容,它的一部分是为了相当难编程的并行物理/AI处理而设计的。

在宏观层面上,Cell是不难理解的;最让人感兴趣的是设计者如何达到目的。

在这篇文章中,我们将集中于Cell的设计主张和构建模块,最终目的是理解Cell为什么会这样设计。

作为IBM,Sony和Toshiba之间的共同投资,Cell微处理器是Sony即将到来的Playstation3的核心部件。

不过,这一次Sony和Toshiba还打算在从消费电子到服务器和工作站的所有产品中使用Cell(或它的一部分)。

如果你还没有什么概念的话,那也该知道Cell作为微处理器,特别是非x86的微处理器,已经让某些人寄予了非常高的期望了。

使用模式

在进入Cell的构架之前,让我们来谈一点关于Cell及其它微处理器当前面对的工作负荷类型。

在过去,办公应用程序性能是隐藏在微处理器发展背后的推动因素。

在多重任务处理和E-mail应用上,以前是单个应用程序执行,而我们在很大程度上谈论的是办公应用软件,文字处理,电子制表软件等等。

因此,大多数微处理器是为了惊人的单个应用程序,单个任务性能设计的。

由于微处理器变得更加强劲了,所以软件也升级了-多任务处理环境诞生了。

然而,大多数的电脑用户仍然集中在单个应用程序使用上,所以微处理器发展继续侧重于单线程性能(单个应用程序,单个任务性能)。

几年过去了,单线程的性能要求提高了。

MicrosoftWord不再是作为界定的应用程序了,而像游戏,媒体处理和动态内容创建这些东西变成了占用最多CPU的应用软件。

这就是我们现今面对的工作负荷,办公,3D游戏,3D内容创建和媒体编码/解码/转码的混合消耗了我们的CPU周期。

但为了了解Cell这么一个新构架的创建,你必须理解这些工作量的极限在哪。

正如今天需要执行的应用程序类型与10年前运行的那些大不相同一样,同样的情况在下一个十年也会发生。

而假定一个新的微处理器构架要5年左右来开发的话,那么现在引入一个面向这些新的使用模式的新构架是切实可行的。

Intel在最近的IDF上就将来的使用模式谈了很多,比如像实时声音识别(甚至是翻译),开放式搜索(例如Google图像搜索),游戏中更好的物理和AI模型,更多特性丰富的用户界面(例如手势识别)等等这些东西。

这些是将来的使用模式,而同样地,它们对微处理器和相关的构架有不同的一套要求。

支持这些使用模式类型需要的性能等级明显比我们今天可用到的更高。

按照惯例,从一代微处理器到下一代,性能的增长通过优化单线程性能来实现。

有许多改进单线程性能的方法,要么提高时钟速度,要么增加每个时钟执行的指令数(IPC)。

更进一步说,从一个单独的线程中能够实现越多的并行处理,性能就会越好-这类并行是指指令级的并行(ILP),它包括在一个线程中同时执行尽可能多的指令。

通过增加ILP改进性能所具有的问题是从一代到下一代,只能带来10%-20%的性能增长。

然而,我们谈到用于未来的使用模式要求明显多于过去已经获得的这类提升。

由于功率限制阻止了时钟速度放得太高,那显然需要另一种改进性能的方法。

在微处理器行业中主要的厂商几乎一致认同,获得必要的性能提升的唯一办法就是向多核心构架迁移。

通过多线程应用程序和多核心处理器的结合,应该能够满足这些类型的应用程序所需要的性能增长。

与侧重于提高ILP来改进性能不同,这些多核心处理器是在线程级上并行操作来改进性能的(线程级并行-TLP)。

不过事情并不是这么简单的。

需要做出许多深思熟虑后的决定。

在多核心微处理器中每个核心需要多大的运算能力?

是需要强劲处理器的小型阵列还是较简单处理器的大型阵列?

它们相互之间如何通信?

怎样处理为多核心处理器提供足够的内存带宽呢?

Cell微处理器就是对这些问题的一个解答。

二、Cell的宏观概述

Cell是跟即将到来的AMD和Intel多核心CPU几乎一样的多核心处理器,唯一的差异是Cell的构架不是完全同类的核心集。

Cell的执行核心

Cell构架以9个独立核心的配置登场:

一个PowerPCProcessingElement(PPE)及八个SynergisticProcessingElement(SPE)。

PPE和SPE是明显不同的,但全部八个SPE是彼此相同的。

PPE是IBM对Cell方案的主要贡献。

它似乎也跟被用在下一代Xbox控制台中的核心非常相似,就是说IBM对Cell所承担的义务并不是一定要让它用在从消费电子到PC的所有设备中,而仅仅是两个主要的游戏控制台而已。

PPE是一个新核心,不同于IBM制造的其它任何PowerPC核心。

虽然PPE拥有现代任何通用微处理器的基本功能,但它有目的地作了简化。

PPE在Cell中的作用是处理任何通用微处理器能够运行的任务;基本上任何能够在Athlon64上运行的就会在PPE上运行。

PPE配备了64KBL1缓存和512KBL2缓存,并且拥有类似于IntelHyperThreading的SMT技术。

PPE使用了一个严格有序的核心,这在桌面x86市场上从最初的Pentium消亡以来就再没有见到过了(PentiumPro把无序执行带到了x86市场),所以向有序核心的转变是一个引人注意的地方。

PPE还只是一个2流程核心,那意味着它最多能够同时执行两条指令。

作为对照,Athlon64是3流程核心,所以立即可以感觉到,PPE是比任何桌面产品简单得多的核心。

PPE还支持IBM的VMX指令集(即Altivec)。

跟Cell处理器的其它核心非常相似的是,PPE被设计为运行在非常高的时钟速度下。

关于PPE没有太多让人感觉不平常的地方,也就是它是一个小,高速,有效率的核心。

跟Pentium4或Athlon64相比,PPE无疑会落败,但PPE的构架符合性能需求上的变化。

例如,商业/办公应用程序中的性能需要非常强劲,非常快的通用微处理器,但游戏控制台中的性能则不然。

最初的Xbox使用了修改过的IntelCeleron733MHz处理器,而当时最快的桌面产品有2.0GHz的Pentium4和1.60GHz的AthlonXP。

假如Cell的第一个应用是Sony的Playstation3,那么PPE的简单是不出奇的。

如果Cell想要进军PC的话,那PPE显然必须得到加强,或至少搭配多个PPE才行。

Cell的Die的主要部分由八个SynergisticProcessingElement(SPE)组成。

如果把PPE看作是通用微处理器的话,那么SPE就是稍微有些特殊侧重点的通用处理器了。

每个SPE是一个功能完整的独立微处理器,但被极度简化了,并且不像PPE那样通用。

SPE没有缓存,但每个SPE却拥有256KB的局部存储器(稍后我们将讨论局部存储器和缓存之间的差异)。

每个SPE还拥有总共达7个的执行单元,包括一个整数单元,所以SPE能够执行整数运算以及SIMD浮点计算。

SPE是双流程的,也就是说它们最多能够执行2条并行的指令。

SPE和PPE两者都采用双流程,引起了对Cell晶体管数量和芯片大小的关注,因为增加流程宽度直接关系到这两个关键的项目。

SPE没有分支预报器,意味着它们完全依靠软件分支预报。

编译器有方法能够消除分支,而SPE构架非常有助于像解开回路这样的事情。

任何初级程序员对回路都很熟悉,在那里一行或多行代码被重复,直到满足某个条件为止。

那个条件(例如i<100)的校验通常会导致分支,所以消除那个分支的一个办法是简单地解开回路。

如果在一个应该执行100次的回路中有一条语句,那要么可以把它留在回路中并照样执行,要么可以取消回路并简单地复制该语句100次。

最终结果是相同的-唯一的差别是在一种情况下有分支条件,而另一种情况导致了更多行待执行的代码。

打开回路具有的问题是需要很多寄存器来解开若干循环,那就是每个SPE拥有128个寄存器的原因了。

SPE原先应该使用VMX(Altivec)ISA,但由于需要多于32个的寄存器,SPE执行了新的ISA,支持128个寄存器。

每个SPE在每个时钟只能够处理两条指令,也就是说每个SPE最多能够同时执行两条指令。

微处理器的流程宽度在很大程度上可以决定微处理器将有多大;例如,Itanium2采用6流程核心,所以作为2流程核心的SPE明显小于大多数的通用微处理器。

最后,我们在SPE上看到的是它们牺牲了一些正常的改进ILP的技巧,以便能够在一个单独的Die上塞进更多的SPE,为了更大的TLP而有效地牺牲掉一些ILP。

既然行业前进的方向是这样,那么向极其侧重TLP设计的迁移是很有意义的,但同时,它将相当依赖于使用非常特殊的开发模型的开发商。

很明显,Cell的设计师把SPE当作运行高度并行化工作量的手段,正如DerekWilson在他关于AGEIAPhysXPPU的文章中所提到的:

“特征很好地适应PC内专门的处理器的图形,它的性质之一就是任务是可无限并行化的。

每个帧需要处理数十万,甚至上亿个的像素。

渲染需要处理得越细致,并行任务就变得越多。

这对物理模型同样成立。

相对于现实世界,物理世界是连续的,而不是离散的。

拥有越多的处理能力,就能够立刻模拟更多的东西,从而能够越实际地逼近现实世界。

由于NVIDIA为Playstation3提供GPU,所以Cell的SPE阵列在游戏控制台中由一个明确的目的-物理及AI处理。

许多人认为,SPE的阵列能够接管GPU的像素处理工作量,但对于高性能控制台来说,那不是很有意义的选择。

SPE阵列能够提供更好的基于CPU的3D渲染,但对于这个SPE阵列来说,那将是艰苦的工作,不如使用专门的GPU硬件。

Cell的On-Die内存控制器

多年以来,我们知道Rambus的内存和接口技术远远领先于竞争对手。

问题是它以前从未在PC上得到很好地实现。

在RDRAM用于PC的早期,Rambus品牌收到了相当负面的评价,并且由于Rambus对DDR世界的诉讼使得该公司的形象变得更差了。

Rambus在许多消费电子设备中已经获得了成功,例如HDTV及Playstation2,所以当Cell宣布大量使用Rambus技术的时候,并不让人太过吃惊。

正如我们早先报导的,在Cell上大约90%的针脚用到了Rambus技术。

剩下的10%大部分是测试针脚,所以Rambus基本上掌握了出入Cell处理器的所有数据。

它们以两个方法来做到这一点:

首先,Cell包含了一个On-Die双通道XDR内存控制器,每条通道有36-bit宽(ECC为32-bit)。

Cell的XDR内存总线运行在400MHz下,但XDR内存以8倍于内存总线时钟的速度传输数据-那意味着获得了3.2GHz数据通讯数据。

最终结果是类似于GPU显存带宽的25.6GB/s。

我们知道,在增加处理器核心数量的时候,内存带宽需求会惊人地增长-由于Cell中的9个核心,XDR是理想的选择。

注意到GeForce6800GT就向它的GPU提供了32GB/s的显存带宽,所以看到Playstation3的GPU搭配它自己的局部存储器以及能够共享系统内存和带宽也不会太令人吃惊。

标注为MIC的模块是XDR内存控制器,而XIO模块是物理层-所有的输入接收器和输出驱动器都在XIO模块中。

数据管线也放在了XIO模块中。

正如在AMD的Athlon64上已经看到的,拥有On-Die内存控制器显著减少了内存延时,这也发生在Cell上。

Cell的On-DieFlexIO接口

Cell另一个重要的I/O技术也受Rambus控制-FlexIO接口。

Cell配备了两个可配置的FlexIO接口,每个为48-bit宽,拥有6.4GHz数据通讯速度。

BEI模块是北桥接口,而FlexIO模块是物理FlexIO层。

“可配置”这个词是特别重要的,因为它意味着无需连接每条线路。

进一步解释这个概念,就是不要把FlexIO接口看作只能连接到一个芯片的,而是具有不同宽度FlexIO接口的多个芯片。

Cell可配置FlexIO接口的一个可能的实现

虽然Cell的XDR接口提供了超过任何PC微处理器2倍的内存带宽,但Cell的FlexIO接口达到了76.8GB/s-几乎10倍于AMD的Athlon64芯片对芯片的带宽。

在Playstation3中,几乎可以预料到NVIDIA的GPU和Cell处理器之间将占用这个极其巨大的带宽了,但它也可能被用做某些相当繁重的I/O接口。

在任何高性能游戏控制台中,主要的需求之一就是带宽,而由于Rambus,Cell拥有了足够的带宽。

三、Cell的有序构架

我们已经提到,PPE和SPE两者都是有序核心,但为了了解有序核心对性能的影响,我们首先必须知道一点背景知识。

相关性,指令排序和并行

什么是相关性?

在许多CPU文章中都提出了相关性这个概念。

在非常基础的级别下,CPU接受到的指令流通常是这样的形式:

操作目标单元格,来源1,来源2,...,来源n

指令格式将从一个CPUISA变化到下一个,但一般的思想是CPU收到一个操作,一个目标单元格来存储操作的结果,以及一个或多个来源,在那上面获取数据来执行操作。

取决于构架,目标单元格和来源可以是内存位置或寄存器。

为了简化问题,我们假定目前所有的目标单元格和来源都是寄存器。

让我们来看一个填写一些数据的例子:

ADDR10,R1,R2

上面一行的汇编将被发送到CPU,告诉它把存储在R1(1号寄存器)和R2中的值加起来,并把结果存储到R10中。

非常简单。

现在我们再给CPU另一个要处理的操作:

MULR11,R10,R3

这一次,我们把存储在R10和R3中的值相乘,并把结果存储在R11中。

作为单独的一行操作,上面的代码是容易完成的,但在直接放到我们的第一个例子后的时候,我们遇到了一点问题:

1.ADDR10,R1,R2

2.MULR11,R10,R3

3.ADDR9,R11,R4

第一行写入R10,同时第二行从R10中读取。

在没有上下文的情况下,CPU可能在第一行完成前开始执行第二行-对第三和第二行的情况也一样。

在这里我们遇到的是所谓的“写入后读取”(ReadAfterWrite,RAW)相关性。

有许多类型的相关性,但理解了这个基础的例子就已经足以让我们进入即将到来的下一个话题了-这种相关性的影响。

相关性带来的问题是它限制了并行执行的能力。

以Athlon64为例。

它有三个整数执行单元,所有这些执行我们上面使用的代码的能力是相等的。

理论上Athlon64能够同时执行并行的三行整数操作-假定操作之间不存在相关性。

执行上面的代码时,Athlon64整数执行单元中的两个将闲置,要等待代码的第一行被执行。

像我们上面讨论的这种简单的相关性,阻碍了现代流行微处理器发挥它们最佳性能的能力。

它仿佛有三只手,但只能通过一次收拾一件物品来打扫房间;这样低下的效率真是令人沮丧啊。

围绕相关性调整指令

幸好,对代码中的相关性问题有多种解决办法;一是从硬件入手解决问题,另一个是在软件中解决问题。

软件编译器负责产生发送到CPU用于执行的汇编代码。

因此,由于CPU内部工作的固有原理,一般来说编译器能够产生最少数据相关性的代码。

有微处理器构架是完全依靠编译器来实现指令级并行的,同时尽可能多地消除相关性。

这些构架被认为是有序微处理器。

有序构架

顾名思义,有序微处理器只能按照指令被发送到CPU的顺序来执行它们。

CPU最多可以并行执行多条指令,但它没有能力对指令重新排序,以更好地适应它的需要。

如果编译器足够好的话,那有序微处理器应该是优秀的。

不过有两个关键的限制:

1.对有序构架的二进制编译是非常依赖构架的

虽然Athlon64和Pentium4两者都完全能够运行x86代码,但它们采用了极其不同的微构架,具有不同的执行单元,并且各自擅长的领域有很大的差异。

如果上述两个芯片都完全依靠编译器来实现并行和最大化性能的话,肯定有一个会遭受极大的损失。

即使每个程序总会有两个版本,但那趋向于变得巨大而杂乱-特别是从升级/补丁的观点来看。

编译器不得不密切关注着它正为之编译的构架,就算它像游戏控制台一样工作,没有众多厂商以共同的ISA提供不同构架的CPU,但还是不如桌面x86市场的好。

2.不可预知的内存延时

缓存在绝大多数时候是个好东西。

微处理器上的缓存尽力保存了频繁使用的数据,所以它应该被做得与CPU通信的延时非常低。

问题是缓存增加了一个不可预知的等级到它从内存获取数据的时间上。

一次缓存冲突可能意味着数据要在10-20个周期后到达。

一次缓存失败可能意味着好几百个周期的延误。

至于有序微处理器,它不能根据数据可用性对指令重新排序,那么如果数据在缓存中不可用的话,CPU就不得不等待更长的时间以把它从主存中取出来,整个CPU不得不闲置,直到那个数据被从主存中读出。

即使有其它的指令能够被执行,有序微处理器也无法有效处理待执行指令的重新排序,以克服不可预知的内存延时。

如果找到办法解决有序构架的限制的话,会有一些非常实际的好处:

1.微处理器设计大为简化

为了处理待执行指令的重新排序,无序微处理器增加了数目惊人的复杂单元。

我们将在下一节中更详细地讨论它们。

通过把这个复杂度转移到软件/编译器那边,极大地简化了微处理器的复杂性,并为其它能够产生更好性能收益的单元剩下了晶体管额度。

越低的复杂性也意味着越小的功耗和发热量。

2.更短的管线

一般来说,为了处理指令的重新排序,构架的管线级数不得不增加,导致了更高的功耗,并且(由于更高的分支预报损失)而需要更精确的分支预报器。

虽然对于较长的管线设计而言,增加管线深度的影响不会很大,但相对于较短的设计,增幅可能达到40%以上。

在历史上,简单的有序核心的思想一度被抛弃,因为有明显的另一个选择:

无序构架。

四、无序构架

与有序构架相对的是无序构架。

无序构架还是按照程序最初的顺序编译指令,并且仍然按顺序撤销指令,但实际的流程/指令的执行可能是无序完成的。

让我们来看看所有这些意味着什么吧。

如果CPU改变了发送给它的代码的意图,那是毫无用处的。

坦白地说,如果双击文件变成执行一串格式化命令的话,那CPU就没有价值了。

虽然那是一个极端的例子,但为了确保这样的事情不会发生,CPU必须遵循两个准则:

1.指令必须按照程序最初的顺序进行编译(也就是通过CPU解释来找出它们正要求它做什么)

2.指令必须按照程序最初的顺序撤销(也就是每个操作的结果必须按照与它被发送到CPU的相同顺序被写入内存/磁盘)

有序和无序构架两者都遵循这两个准则-在这两个阶段之间无序构架所做的处理不同。

我们前面提到了有序构架不能对待执行指令重新排序。

假如我们拥有一个有序CPU,它有一个加法器和一个载入/存储单元,它被要求执行下列代码(为了简单,我们在这里不讨论带有网络的情况):

1.LDR10,R11

2.ADDR5,R10,R10

3.ADDR9,R9,#1

4....

在第一条指令中,我们从存储在R11中的内存地址中载入数据到R10。

然后,我们对刚从内存中取出的值做自加运算,并把结果存储在R5中。

第三行,也是最后一行对存储在R9中的值赋予1的增量,并保存到R9中。

快速浏览一下代码就发现,第二行不能在第一行之前执行。

那样做将改变代码的目的(如果想要对某个值做自加运算,首先需要确保有这个值)。

不过第三行是完全独立于第一跟第二行的。

对于有序微处理器,如果第一行要载入的数据就包含在缓存中的话,那么该指令将花费大约1-30个时钟周期来完成(根据构架和它所处的缓存级数而有所不同)。

第二行在执行前将不得不等足那1-30个周期,然后到它执行了以后才轮到第三行。

如果被请求的数据不是存储在缓存中的话(或许我们是第一次用到这个值,而我们又没有用到内存中存储在它附近的值),那我们有问题了。

出乎意料地,第一行不是用大约1-30个周期来完成;现在它将用200个以上的时钟周期来完成。

对于第二行倒没什么影响,因为它无论如何都要等第一行完成了才能执行,但对于第三行来说,它可以很容易地在CPU正等着从内存中取出数据的时候执行。

跟在第三行后面的任何独立指令也受到缓存失败的影响。

然而,至于无序微处理器,缓存失败的情况就大相廷径了。

代码仍然按照顺序解码,意味着它以跟有序CPU相同的顺序获得指令1,2及3,但这时候我们有了在第一和第二行之前执行第三行的能力,而不是空等着第一行完成。

如果发生缓存失败,这就给了无序微处理器一个相当大的性能优势,因为它不是在那等着浪费时钟周期而什么都不干。

那么,无序CPU是怎么工作的呢?

如果有人以任何你想要的顺序让你做一系列的事情,那你只用简单地接受这个列表并完成它就行了。

但如果他们又让你以他们规定的顺序报告返回你已经完成的事情,那你肯定要先把它们写下来,再重新组织它们为符合需要的顺序。

无序CPU的工作非常接近于同样的方法,只是以一个指令窗口代替了待办事项列表。

指令窗口的功能类似于待办列表-它有所有以最初的顺序解码的指令,并保留了一个记录以确保这些指令按照它们被解码的顺序撤销。

在指令窗口旁边,无序CPU还有一个时序安排窗口–就是在这个“窗口”中完成所有的指令重新排序的。

时序安排窗口包含了正确的推理来标出相关和独立的指令,并在等待相关指令为执行作准备的时候把所有的独立指令发送到执行单元。

当先前的相关指令(也就是等待来自主存中的数据或等待其它指令完成的指令)变成独立时,它们就能够被执行了,也是按照打乱的顺序的。

你可能立即会说,增加的指令窗口,时序安排窗口,所有检测独立指令的相关推理以及没有提到的处理无序执行但有序撤销的推理,所有这些导致了更复杂的微处理器。

但对于无序微处理器还有另一个重要的问题-性能上的增长和指令级并行是非常依赖于指令窗口的大小的。

这个窗口安排得越大,就完全能够执行越多的并行,因为CPU面对着一个更广的指令集合,从中选出独立的指令。

同时,窗口安排得越大,时钟速度就会越低。

例如,Itanium有非常大的指令窗口来满足它的执行单元,而Pentium4为了达到更高的时钟速度,只有一个小得多的窗口。

尽管有着这样那样的不足,但所有的流行x86微处理器无一例外地采用了无序核心,因为保持单核心构造简单在制造工艺提升时并不是应予优先考虑的事情。

无序构架的好处有两方面:

1.指令的动态重新排序让CPU回避了内存延时,可以获得更高的时钟速度。

对于每次缓存失败,Pentium43.6GHz不得不等待大约230个时钟周期来从主存中取出数据,这在CPU看来是许多的空闲时间。

能够在期间通过执行其它的独立指令来利用这

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2