存档

‘读书笔记’ 分类的存档

处理器的存储子系统(二)– Cache

趁着刚考完高性能,还能记得一点东西,赶快写些cache相关的,算是回应之前那篇关于存储概述的文章.

在现在的CPU里,Cache所占的晶体管数目都达到80%以上,所以设计一个高速度低功耗的Cache很重要。

具体见下表(片内RAM主要就是指Cache,表引自老大的ppt):

Processor % Area (­cost) %Transistors(­power)
Alpha 21164 37% 77%
StrongArm SA110 61% 94%
Pentium Pro 64% 88%

首先,Cache的作用,这个大家都知道,就是为了加快访存速度,尽量能将CPU喂得饱一点。

其次,Cache的内容,这个大家也都知道,一般就是tag和数据,需要注意的是,数据一般不会是只有一个字节,一般都有32个字节或以上,这些所有数据组成一个Cache行(Cache Line,有时译作Cache块),这时候会有一个offset的概念,就是指在Cache Line内的偏移量。

再次,Cache的相连方式,有全相连,组相连,直接相连,全相连Cache利用率最高,但是,由于Tag位数很多,并且需要全比较,硬件复杂,功耗也高,基本没用。而直接相连Cache利用率太低了,所以几乎不用。一般只用组相连,并且当组数大于8时,增加组数利用率提高不了多少。至于具体的相连方式,随便翻本书,讲的详细的很,不再赘述。

还有一些关于Cache的就是发生Cache Miss时的处理策略,比如说替换算法,写策略(比如写穿透,写分配),但这些东西也是很容易找到的,本文也不赘述,下面重点讲讲设计一个高速度低功耗的Cache系统的主要技术.其实提高速度和减少功耗往往也不一定是矛盾的,某种方法对这两方面都有提高。

1. 提高Cache速度方面的设计技术

主要有增大Cache容量,增大块大小(可能会增加伪共享),增加相连度等方法,但这些都比较容易理解。下面主要讲一下现代处理器设计里面的常用到的虚地址Cache。

一般来说,Cache里面的地址索引都是用物理地址索引,不会用虚地址索引,但这就会导致一个问题,由于程序里面所用到的地址都是虚地址,因此,这些地址需要先进行转化,转化成物理地址(后面关于TLB的文章会讲到,这就是页表),才能用来索引访问Cache,这就导致了访问Cache的时间增加了转化时间。那有没有办法把这些转化时间减去呢,答案是有,那就是虚地址Cache,实地址和虚地址Cache的比较如下图:


但是,用虚地址索引会导致一个问题,那就是两个进程的虚地址可能是一样的,而其物理地址不一样,这就会导致一个“错误共享”问题。解决这个问题的一个办法就是每次切换进程都刷一次Cache,但这会增加Cache冷失效,导致很高的代价。另一个方法是在Cache Line 上加一个进程id号的域,这会增加Cache面积,尤其是进程号的取值可以很大的时候。

还有一个问题就是别名问题,和“错误共享”相反,这个问题是,本来需要共享的(比如为了进程中通信),但是由于两个进程对应同一物理地址的虚拟地址不一样,导致共享不成功。解决这一问题的方法是虚索引实Tag技术(Virtually indexed, physically tagged, VIPT),即在用Index从cache中读Tag的同时,进行虚实地址转换,可以使用物理地址做tag来比较确定选用索引出来的数据。但这会导致一个问题,就是当页大小(Page size)小于一个Cache组大小的时候,无法保证虚索引和实索引的一致性,此时需要用到也着色技术(Page coloring),这需要操作系统支持。具体如下图:

2. 降低Cache功耗方面的设计

这可以从两方面考虑,一方面是降低失效,可以有Victim Cache技术,硬件预取技术等。其中Victim Cache是在原来的Cache旁加一个小的Buffer(叫做Victim Cache),当换出来的块可以先放到Victim Cache(Victim Cache一般采用全相连),这样的话,下次用到可以直接在此取,不用去主存取,降低了Cache容量缺失率,减少时间的同时也降低了功耗。预取就是当访存总线空闲的时候,把可能用到的数据先取到Cache.

另外一个比较重要的技术就是路预测,比如对于8路组相连的Cache,index索引后会有八个结果,一般情况下需要将Tag和这八个结果一一比较,会消耗比较多的功耗。路预测就是根据局部性原理,猜测会用那路,这样只和那一路比较,只有比较失败的时候才和其他的比较。当预测准确率较高时,可以大大减少比较次数,降低功耗。

超大规模集成电路(VLSI)可测性设计(DFT)综述

PS:这是我们VLSI可测性的一个课程作业,写完已经交上去了,但想到交上去也没人会认真看,觉得花了的时间不太值,所以贴到这里,希望对想了解可测性设计的同学有点用,也算弥补一下哥的精神损失。强调一下,里面的概念什么的可能不太准确,请以专业的文献为准。

 

1. 背景介绍

随着电子电路集成度的提高,电路愈加复杂,要完成一个电路的测试所需要的人力和时间也变得非常巨大。为了节省测试时间,除了采用先进的测试方法外,另外一个方法就是提高设计本身的可测试性。其中,可测试性包括两个方面:一个是可控制性,即为了能够检测出目的故障(fault)或缺陷(defect),可否方便的施加测试向量;另外一个是可观测性,指的是对电路系统的测试结果是否容易被观测到。

在集成电路(Integrated Circuit,简称IC)进入超大规模集成电路时代,可测试性设计是电路和芯片设计的重要环节,它通过在芯片原始设计中插入各种用于提高芯片可测试性(包括可控制性和可观测性)的硬件逻辑,从而使芯片变得容易测试,大幅度节省芯片测试的成本。

后续章节的组织如下,我们将在第二章分析可测试性设计的几个关键问题;第三章分别介绍三种比较成熟的可测试性设计技术;最后一章对可测性设计技术进行了总结和展望。

2. 关键问题

一个好的可测试性设计技术需要解决以下几个关键问题:

第一,取得较高的可测试性:即要求可测试性设计能够尽可能的提高可控制性和可观测性,这就要求设计中必须尽可能多的给每个部分增加控制电路和观测电路。

第二,取得较低的额外性能和面积消耗(即降低Overhead):由于可测试电路对最终的芯片的实际工作是无益的,因此,必须尽可能的使减少这些逻辑,使之带来的额外的面积,功耗,以及性能消耗最小。

实际的设计中,必须平衡并且最优化上面两个目标,这就要求我们必须设计一种好的逻辑结构或者算法用来输入测试向量以及输出观测结果,并且额外增加的面积和功耗要尽可能小。扫描链(Scan Chain)[4]很好的满足上述特性,因此,无论是在学术界还是工业界的可测性研究中,扫描链都是一种必选的可测性设计基础结构。

基于对上述目标和认识,学术界和工业界提出了几种比较成熟的可测试性设计技术,主要有扫描路径设计、边界扫描设计、内建自测试等。我们将在下一章节分别介绍这三种芯片可测试性设计技术。

3. 几种常见的可测试设计技术

3.1 扫描路径设计(Scan Design)

扫描路径法[1][2](有的地方又译成内部扫描法,扫描设计)是一种针对时序电路芯片的DFT方案.其基本原理是时序电路可以模型化为一个组合电路网络和带触发器(Flip-Flop,简称FF)的时序电路网络的反馈。如图一所示:

clip_image002

图一. 插入可测性逻辑前的时序电路

 

为了控制和观测这些触发器的取值,在扫描设计中,会将这些触发器修改为扫描触发器,并且连接成扫描链(相当于可以移位的寄存器),扫描链的输入可以通过少量的芯片管脚进行输入,观测输出也可以通过少量的芯片管脚进行输出。为了减少输入输出所占用的额外管脚,设计成可以通过扫描输入口把需要的数据通过串行移位的方式输入到扫描链对应的单元;同样,也可以通过扫描输出口串行的观测测试输出(这些扫描寄存器即可以看做输入,也可以看做输出,因此称之为伪输入,伪输出)。

图二是一个扫描设计示例,图二(a)中,将所有的扫描触发器串在了一起,并且通过SE线号进行统一控制,选择是进行输出扫描向量,还是输出观测结果。图二(b)中,是测试的输入输出示例,在第一个测试中,测试向量110在SE=1时,通过3拍输入到扫描链中,同时在SE=0且下一个时钟沿观测结果输出。

clip_image004

图二. 扫描设计示例

由于考虑到扫描设计本身的硬件代价,实际电路和芯片设计中并不会把所有的触发器替换成扫描触发器(全部替换的称之为“全扫描”),此时的设计称之为“部分扫描”设计。对于部分扫描设计,需要解决两个问题:一是如何决定扫描那些触发器,使芯片的可测试性(也即可控制性和可观测性)达到最高,文献[3]就对这一问题进行了研究,并且给出了一个如何设计一个最小化扫描开销(overhead)的部分扫描的方法;二是当电路进行扫描时,非扫描触发器的状态该如何变化,由于要保证电路的执行结果和不测试时一样,因此非扫描触发器必须设计成状态保持不变。

3.2 内建自测试

内建自测试(BIST)设计技术[5][6]通过在芯片的设计中加入一些额外的自测试电路,测试时只需要从外部施加必要的控制信号,通过运行内建的自测试硬件和软件,检查被测电路的缺陷或故障。和扫描设计不同的是,内建自测试的测试向量一般是内部生成的,而不是外部输入的。内建自测试可以简化测试步骤,而且无需昂贵的测试仪器和设备(如ATE设备),但它增加了芯片设计的复杂性。

clip_image006

图三. 一个典型的内建可测试结构

 

图三是一个典型的内建可测试结构,它主要包括四个部分,测试控制部分(BIST Controller),测试向量生成器(Test Pattern Generater,简称TPG),被测电路(Circuit Under Test,简称CUT)以及测试响应分析器(Output Response Analyzer,简称ORA)。

这四部分中,最重要的一个部分就是测试向量生成器TPG,因为这个生成器能够产生的测试向量的数目与质量直接决定着这个测试系统的覆盖率和测试质量;TPG一般是一个有限自动状态机,它除了时钟没有其他的输入。典型的TPG是一个线性反馈移位寄存器(Line Feedback Shift Register,简称LFSR)或者一个细胞自动机(Cellular Automata,简称CA)[7]。

BIST的测试响应分析器ORA是对测试结果进行比较分析,但它通常不会直接对测试响应进行比较,而是先进行压缩,因为对这些测试响应一位一位的进行比较分析会消耗大量额外的片内存储单元。但压缩也会导致混叠(Aliasing)现象,因为对同一个输入,两个不同的电路输出压缩后可能是一样的。

由于BIST做到了芯片的内部,为了减少测试逻辑在整个芯片面积所占的比例,以及减少测试电路(尤其是在线测试电路)带来的额外的性能以及功耗消耗,设计一个好的BIST系统是一个很复杂的系统工程。因此,BIST加大了芯片设计的复杂度。

3.3 边界扫描测试

前述两种测试技术都是针对芯片内部的故障或缺陷进行测试。为了对电路板级的逻辑和连接进行测试,工业界和学术界提出了一种边界扫描的设计,边界扫描主要是指对芯片管脚与核心逻辑之间的连接进行扫描。

由于边界扫描测试涉及不同的芯片的连接,而这些芯片很可能是不同设计者甚至厂家设计的,因此必须对这些测试接口进行标准化,以便不同厂商之间的能够用统一的测试接口。1994年,美国电气电子工程师协会(Institute of Electrical and Electronics Engineers,简称IEEE)制定了一个针对边界扫描测试的标准IEEE 1194.1[8]标准,该标准又称JTAG(Joint Test Action Group)标准。该标准是为了支持板级测试而定义一种国际上通用的芯片边界扫描以及访问端口规范。

clip_image008

图四. JTAG边界扫描设计的基本结构

 

图四是JTAG边界扫描基本结构图,边界扫描设计主要包括测试访问端口(Test Access Port,简称TAP)控制器、指令寄存器、旁路寄存器、以及边界扫描链(由边界扫描单元构成)。

JTAG定义了以下测试访问接口

① TCK(Test Clock):测试时钟输入;

② TDI(Test Data In):测试数据输入,数据通过TDI输入JTAG口;

③ TDO(Test Data Out):测试数据输出,数据通过TDO从JTAG口输出;

④ TMS(Test-Mode Select):测试模式选择,TMS用来设置JTAG口处于某种特定的测试模式。

⑤ TRST(Test Reset):可选引脚,用于测试复位,为输入引脚,低电平有效。

JTAG内部有一个状态机,称为TAP控制器。TAP控制器的状态机通过图上的TCK和TMS进行状态的改变,实现数据和指令的输入。

4. 总结和展望

随着各种可测试性设计结构的提出以及实现的成熟,各种EDA工具对可测试性设计设计的支持也越来越好,这加快了可测性设计本身的设计周期以及最终的芯片或系统的测试周期。但是,随着以多核(Multicore)以及片上系统(System On Chip,简称SOC)为代表的芯片复杂度持续提高,迫切需要改进或提出一种新的可测性设计方法,该方法需要符合以下特性:

第一,通用性:由于现在芯片的设计愈加复杂,设计周期也愈加长,因此,为每个电路专门设计一个测试电路已经不太实际。因此需要有一个针对更复杂电路(如多核和SOC)可测性设计的通用结构,其中,IEEE 1500[9]标准是这方面的有益尝试。

第二,可复用性:芯片设计中,除了需要考虑可测性设计DFT以外,还需考虑(硅后)可调试性设计(Design For Debug,简称DFD)[10],由于DFT和DFD有很多的共同点,因此,可以考虑将DFT和DFD部分单元进行复用。

第三,可重构性:通过可重构的设计方法,可以通过不同的配置,可是实现不同的测试功能,测试芯片的不同部分或功能。

参考文献 

[1]. K.-T. Cheng and V. D. Agrawal, “An economical scan design for sequential logic test generation,” inProc. Fault-Tolerant Comput. Symp. (FTCS-19), June 1989, pp. 28-35.

[2]. E. Trischler, “Design for testability using incomplete scan path and testability analysis,”Siemens Forsch.- u. Entwickl.-Ber., vol. 13, no. 2, pp. 56-61, 1984.

[3]. C.-C. Lin, M. Marek-Sadowska, K.-T. Cheng, and M. Lee, “Test point insertion: scan paths through combinational logic,” Proc. of Design Automation Conf., 1996, pp. 268-273.

[4]. Joep Aerts, Erik Jan Marinissen: Scan chain design for test time reduction in core-based ICs. ITC 1998: 448-457

[6]. Vishwani D. Agrawal, Charles R. Kime, Kewal K. Saluja: A Tutorial on Built-In Self-Test, Part 2: Applications. IEEE Design & Test of Computers 10(2): 69-77 (1993)

[7]. S. Wolfram, “Universality and complexity of cellular automata,” Physica, 10D, 1984, pp. 1-35.

[8]. IEEE(1994). “Supplement(B) to IEEE standard test access port and boundary-scan architecture.”

[9]. IEEE(2005). “IEEE 1500:Standard for Embedded Core Test”

Bart Vermeulen , Sandeep Kumar Goel, Design for Debug: Catching Design Errors in Digital Chips, IEEE Design & Test, v.19 n.3, p.37-45, May 2002

处理器的存储子系统(一)–概述

2010年12月28日 1,196 条评论 21,393 views

注:这学期第一次做高性能作业(其他十次都没做…),做完后感觉有点收获,做个总结,算是备忘。

随着工艺水平的提高,集成电路的集成程度越来越高,主频也不断提高,处理器的功能部件的计算能力越来越强(现在已经能够一拍就完成32位定点乘法),处理器的性能瓶颈不再再是处理器核心的计算能力了,而是突出表现为访存的瓶颈上了,正如老大所说,“如何喂饱饥饿的CPU”成了处理器设计的主要问题,因此设计一个高效的,能尽量喂得快点的存储子系统对于当今的处理器设计越来越重要。

由于辅存(如硬盘)的访问速度太慢,根本无法喂饱饥饿的CPU,于是出现了主存,随着处理器性能提高,主存的速度也不够,根据局部性原理,于是出现了Cache,最早Cache做在片外,后来处理器性能提高了,做在外面也不行,于是做到了片内,之后为了更优化Cache,又出现了L1Cache,L2 Cache,甚至L3 Cache。随着SMP以及CMP的出现,存储一致性问题愈加突出,成为影响程序执行是否正确的一个重要因素。现在处理器的存储层次如下图:

mem_arch

另一方面,随着多任务操作系统的引入,导致了逻辑地址(又叫虚拟地址)和物理地址的区分,为了建立虚拟地址VA和物理地址PA的映射关系,出现了页表机制。但是,直接在主存中查找页表进行虚实地址转化的代价太高了,于是又出现了旁路转换缓冲TLB(又称为页表缓冲,Translation lookaside buffer),还是根据局部性原理,通过将最常使用或者最近使用的页表直接保存在处理器核内,可以大大的提高虚实地址转换的速度,提高处理器的整体性能。

纵观真个处理器存储系统的发展,其基本目的都是喂饱CPU,设计的基本依据都是程序的时间局部性和空间局部性。

ps:写这篇文章的时候,我想起了前几天计算所举办的高通量计算机的研讨,的确,在云计算的背景下,高通量计算机的应用前景非常好,但无论是云计算,还是高通量计算机,做好一套非常好存储系统(这好体现在访问速度快,并且不会影响程序执行的正确性)都是非常必要的。当然,作为一个计算机系统,文件系统也是非常重要的。

ps2:后面两篇文章分别总结下对于单个处理器的存储系统中最重要的两个部分,Cache和TLB。

忆阻器(Memristor)研究简述

2010年12月21日 1,350 条评论 29,028 views

题外话:其实这是VLSI老师布置的一次作业,要求选读一篇VLSI的论文,写读后感,我在PCM和MR徘徊了好久,最终决定读了几篇MR的。

忆阻器的提出

忆阻器的英文 Memristor 来自“Memory(记忆)”和“Resistor(电阻)”两个字的合并。1971年,任教于美国柏克莱大学的华裔科学家蔡少棠(Prof. Leon Chua)提出了忆阻器的概念[1]。

在研究电荷、电流、电压和磁通量之间的关系时,蔡教授推断在电阻、电容和电感器之外,应该还有一种组件(那篇文章称之为“迷失的电子器件”,又称“第四种电子器件”),代表着电荷(q)与磁通量(clip_image002)之间的关系。这种组件的效果,就是它的电阻会随着通过的电流量而改变,而且就算电流停止了,它的电阻仍然会停留在之前的值,直到接受到反向的电流它才会被推回去。电阻,电容,电感以及忆阻器之间的关系为:

clip_image004

图一. 四类基本电子器件,忆阻器的位置在右下角(图引自文献[2])

忆阻器的实现

蔡教授提出忆阻器理论后几十年过去了,工业界一直没有找到能够实现忆阻器的材料。

时间到了2005年,由 HP 的 Phillip J Kuekes 领军的团队,正在进行的一种称为 Crossbar Latch 的技术的研究[2]。Crossbar Latch 的原理是由一排横向和一排纵向的电线组成的网格,在每一个交叉点上,要放一个“开关”连结一条横向和纵向的电线。如果能让这两条电线控制这个开关的状态的话,那网格上的每一个交叉点都能储存一个位的数据。这种系统下数据密度和存取速度都是前所未闻的,问题是,什么样的材料能当这个开关?这种材料必需要能有“开”、“关”两个状态,这两个状态必需要能操纵,更重要的,还有能在不改变状态的前提下,发挥其开关的效果,允许或阻止电流的通过。如何取得这样的材料考倒了 HP 的工程师。

直到2008年(距蔡教授提出忆阻器已经37年过去了)才出现了转机,另一个由 Stanley Williams 领军的 HP 团队在研究二氧化钛的时候,意外地发现了二氧化钛在某些情况的电子特性比较奇特。

Stanley等人发现,一块极薄的二氧化钛被夹在两个电极中间,这些二氧化钛又被分成两个部份,一半是正常的(图二中undoped部分)二氧化钛,另一半进行了“掺杂”(图二中doped部分),少了几个氧原子。当“掺杂”的那一半带正电,因此电流通过时电阻比较小,而且当电流从“掺杂”的一边通向正常的一边时,在电场的影响之下缺氧的“掺杂物”会逐渐往正常的一侧游移,使得以整块材料来言,“掺杂”的部份会占比较高的比重,整体的电阻也就会降低。反之,当电流从正常的一侧流向“掺杂”的一侧时,电场会把缺氧的“掺杂物”从回推,电阻就会跟着增加[2]。因此,整个器件就相当于一个滑动变阻器一样。

clip_image005

图二. HP忆阻器实现原理图,D是夹层宽度,w是“掺杂”部分宽度,掺杂宽度和器件通过的电量的方向和大小有关,可以表征器件的阻抗(resistance),一般来说,阻抗Rw/D正相关,图改自文献[2]

忆阻器的未来

相比于现在的主要电子器件,CMOS器件,忆阻器有以下优点:

A. 忆阻器由于具有“记忆”功能,属于一种不需要能源的存储设备,因此用来做低功耗的RAM很有前景。

B. 用忆阻器实现的Cross Latch系统可以形成立体的内存,并且每个电线的开关大小是3nm x 3nm,其存储密度高达100 gigabit/cm²,立体的高达1 petabit/cm³。因此很有希望用来做高密度的存储部件,有望替换闪存(Flash)。

C. Crossbar Latch的网格状设计,和每个交叉点间都有开关,意味着整组网格在某些程度上是可以逻辑化的。已经有方法模拟 AND、OR 和 NOT 三大逻辑闸,几个网格的组合甚至可以做出加法之类的运算。这为摆脱晶体管进到下一个世代开了一扇窗,很多人认为忆阻器电脑相对于晶体管的跃进,和晶体管相对于真空管的跃进是一样大的。另一方面,也有人在讨论电路自已实时调整自已的状态来符合运算需求的可能性。这点,再搭配上忆阻器的记忆能力,代表着运算电路和记忆电路将可同时共存,而且随需要调整。这已经完全超出了这一代电脑的设计逻辑,可以朝这条路发展下去的话,或许代表着新一代的智慧机器人的诞生[4]。

参考文献:

[1]. Chua, L. O. Memristor – the missing circuit element. IEEE Trans. Circuit Theory 18,507–519 (1971).

[3]. Strukov, D. B., Snider, G. S., Stewart, D. R. & Williams, R. S. The missing memristor found. Nature 453, 80–83 (2008).

[3]. Kuekes, P. J., Stewart, D. R. & Williams, R. S. The crossbar latch: logic value storage, restoration, and inversion in crossbar circuits. J. Appl. Phys. 97, 034301 (2005).

[4]. Mouttet, Blaise L. "Memristor Pattern Recognition Circuit Architecture for Robotics". Proceedings of the 2nd International Multi-Conference on Engineering and Technological Innovation II: 65–70(2009)

CMP读书笔记一:CMP的提出

2010年10月17日 938 条评论 13,683 views

这段时间,天天上午睡觉,下午去实验室,晚上三国杀,很久没有静下心来看书了,感觉继续这样下去会不行的。于是打算开始看些体系结构领域相关的书籍,为了提高效率,尽量写写读书笔记。

我选的第一本书是《Chip Multiprocessor Architecture:Techniques to Improve Throughput and Latency》。这是一本刚出不久的,关于片上多核处理器(Chip Multiprocessor,CMP)的设计技术的书,由Kunle Olukotun,Lance Hammond,James Laudon合著的,其中前两位作者都是斯坦福TCC(Transactional coherency and consistency)小组的大牛,第三位作者Sun公司的工程师,Sun公司是我最敬佩的技术类公司,没有之一,只是可惜死了。这本书主要关注的是如何提高处理器的吞吐量以及降低延时。里面涉及了很多新的技术(包括一些没有在工业界实现的技术,如线程级预测TLS-Thread Level Speculation、事务内存-TRANSACTIONAL MEMORY),个人觉得对做多核芯片和并行程序设计的人来说还是不错的一本书。

本书的第一章回顾了整个CPU的发展史,从指令集并行(Instruction-Level Parallelism,ILP)引出了线程级并行(Thread-Level Parallelism),从而导出了CMP的话题。

2006年之前,CPU的性能基本上是按着摩尔定律发展的,这得益于两个方面,一个是集成电路的发展,另外是处理器结构的优化,如超标量技术(Superscalar),动态流水线技术(Dynamic Pipeline),乱序执行技术(Out-of-order Execution)。

但是,在2006年左右,摩尔定律出现了一次危机,ILP也几乎走到了尽头,主要原因是:

  • 集成电路已经发展到了极限,再要提高集成度非常困难,尤其是现在28nm的情况下。
  • 功耗问题的突出,为了提高单核心的速度,提高ILP,现在的处理器花了很大一部分面积用于这些技术的调度,如动态流水线的调度,乱序执行的调度,这些面积的功耗已经远远超过了运算器件的功耗。导致处理器的效率(性能功耗比)急剧下降。
  • 设计验证难度的增加,要想在单核情况下提高处理器的性能,需要设计更复杂的超标量乱序执行动态流水线结构,这导致芯片的设计,尤其是验证呈指数增加,很难再一两年内设计出一款商业的芯片。
    于是,学术界和工业界就提出了更粗粒度的并行,线程级并行TLP。于是有了多核处理器的诞生,多核处理器的主要思想就是,一个芯片内集成几个核,每个核可以做的简单点,每个核的性能功耗比就能做的比较好,从而总的性能功耗比也得到了提高。
    之前的单核超标量处理器的并且,主要都是在ILP层面,通过多发射,分支预测技术,只能处理器一些基本的,很小的并行块,无法进行线程级甚至任务级的并行。各种粒度的并行和各种体系结构的关系如下图:

image

接着作者举了个CMP和Uniprocessor的比较的例子,并做了性能,效率的比较分析。

最后,作者指出了本书主要讨论的问题,一个处理器的吞吐量,一个是延时。前者主要针对并行粒度大,并行度高的应用,如互联网应用;后者主要针对一些延时敏感的应用,如各种实时系统以及各种桌面应用。

无觅相关文章插件,快速提升流量