在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 23704|回复: 69

新书出版——《超标量处理器设计》

[复制链接]
发表于 2014-4-12 21:44:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 processor 于 2014-4-15 22:22 编辑

封面.jpg

    讲述超标量处理器(Superscalar Processor)设计的新书——《超标量处理器设计》现在正式出版了,目前可以在china-pub、亚马逊、当当、京东以及万能的淘宝上面购买,地址是:

亚马逊http://www.amazon.cn/%E8%B6%85%E6%A0%87%E9%87%8F%E5%A4%84%E7%90%86%E5%99%A8%E8%AE%BE%E8%AE%A1-%E5%A7%9A%E6%B0%B8%E6%96%8C/dp/B00JFJTI2I/ref=sr_1_1?ie=UTF8&qid=1397309183&sr=8-1&keywords=%E5%A7%9A%E6%B0%B8%E6%96%8C

当当http://product.dangdang.com/23453265.html#ddclick?act=click&pos=23453265_1_2_q&cat=&key=%B3%AC%B1%EA%C1%BF%B4%A6%C0%ED%C6%F7%C9%E8%BC%C6&qinfo=2_1_48&pinfo=&minfo=&ninfo=&custid=&permid=20130526214934617401543862100482965&ref=http%3A%2F%2Fwww.dangdang.com%2F&rcount=&type=&t=1397307869000


京东http://item.jd.com/11440089.html
china-pubhttp://product.china-pub.com/63610

    或者在淘宝上直接搜索这本书的名字即可。


内容简介:
    《超标量处理器设计》讲述超标量(superscalar)处理器的设计,现代的高性能处理器都采用了超标量结构,大至服务器和高性能pc的处理器,小至平板电脑和智能手机的处理器,无一例外。本书以超标量处理器的流水线为主线展开内容介绍。本书主要内容包括超标量处理器的背景知识、流水线、顺序执行和乱序执行两种方式的特点; cache的一般性原理、提高cache性能的方法以及超标量处理器中的cache,尤其是多端口的cache; 虚拟存储器的基础知识、页表、tlb和cache加入流水线后的工作流程; 分支预测的一般性原理、在超标量处理器中使用分支预测时遇到的问题和解决方法以及如何在分支预测失败时对处理器的状态进行恢复; 一般的risc指令集体系的简单介绍; 指令解码的过程,尤其是超标量处理器中的指令解码; 寄存器重命名的一般性原理、重命名的方式、超标量处理器中使用寄存器重命名时遇到的问题和解决方法以及如何对寄存器重命名的过程实现状态恢复; 指令的分发(dispatch)和发射(issue)、发射过程中的流水线、选择电路和唤醒电路的实现过程; 处理器中使用的基本运算单元、旁路网络、cluster结构以及如何对load/store指令的执行过程进行加速; 重排序缓存(rob)、处理器状态的管理以及超标量处理器中对异常的处理过程; 经典的alpha 21264处理器的介绍。在本书中使用了一些现实世界的超标量处理器作为例子,以便于读者加深对超标量处理器的理解和认识。
   《超标量处理器设计》可用作高等院校电子及计算机专业研究生和高年级本科生教材,也可供自学者阅读。




前言
    现代的通用处理器从指令集方面来看,可以分为精简指令集(RISC)和复杂指令集(CISC)这两种,CISC伴随着处理器的诞生,最开始的处理器都是使用这种指令集,力求在一条指令内完成很多的事情,并且使用尽可能多的指令,覆盖到各种各样的操作,这样可以降低对存储器的需求,并且简化编译器的设计; 随着时间的推移,当存储器和编译器都不再是问题的时候,RISC就产生了,它基于一个观察: 80%的CISC指令只在20%的时间被使用,这样可以只将经常使用的20%的CISC指令使用硬件来实现,剩余80%的指令可以使用软件来模拟,因此可以简化硬件的设计,同时,为了便于使用流水线,不像CISC指令那样,指令的长度可以变化,RISC指令采用了等长的方法,每条RISC指令的长度都是32位,这样可以降低解码的难度,易于流水线的设计,这些因素都使RISC指令集的处理器有着更高的频率,同时功耗和成本相对也更低,虽然有时候为了完成一个任务,它需要使用更多的指令来实现,但是考虑到它有着更高的频率,所以综合来看,执行时间也未必就会变长。
    同时,现代的通用处理器从实现方式来看,可以分为标量(scalar)和超标量(superscalar)这两种,标量处理器每周期最多只能执行一条指令,它一般都是按照程序中指定的顺序来执行指令,这称之为顺序执行(in?order); 这种方式制约了处理器性能的提高,于是就有了超标量处理器,它能够在一个周期内执行多条指令,这样可以缩短一个程序的执行时间,指令在处理器中可以按照程序中指定的顺序来执行,也可以不遵循这个顺序,只要指令的源操作数都准备好了,它就可以被执行,这种方式就称为乱序执行(out?of?order),当然,乱序执行也不能够改变程序本来的功能,在超标量处理器中,还需要一些方法来使这些乱序执行的指令看起来仍然按照程序中指定的顺序更改处理器的状态,在超标量处理器中的这些功能注定了它的复杂性,相比于标量处理器,它需要更多的硬件资源和更高的功耗,这就是性能提升所带来的代价。
    上述的这两种划分(CISC和RISC,以及scalar和superscalar)是相互正交的,也就是说,它们可以有四种组合,这四种组合在处理器的世界中均有使用,分别介绍如下。
  *Scalar CISC: 这是处理器最开始的时候采用的结构,这种结构一般会直接对CISC指令进行解码,甚至可能不使用流水线,典型的例子就是Intel的8086、80286等处理器,它们均采用了这种结构,随着时间的推移,这种结构已经逐渐被淘汰了。
  *Scalar RISC: 这是RISC处理器刚刚出现的时候采用的结构,由于RISC指令集降低了对硬件的需求,并且便于流水线的实现,所以这种结构的处理器多使用流水线来提高性能,它的主频一般比较高,并且成本也很低,在RISC处理器出现的早期,典型的例子就是mips R2000和R3000、Alpha 21064和arm7等众多的RISC处理器,这种结构到了现在依然有着旺盛的生命力,在嵌入式低功耗领域的处理器均采用了这种结构,例如MIPS的4K系列处理器、ARM的Cortex M和Cortex R系列处理器等。
  *Superscalar RISC: 随着对处理器的性能需求越来越高,每周期执行一条指令的处理器已经不能满足要求了,于是在RISC处理器中率先采用了每周期执行多条指令的结构,为什么它会首先出现在RISC处理器中呢?这是因为RISC指令集比较规整,便于使用硬件来实现,而且早期的RISC处理器多面向服务器等性能要求比较高的领域,这就驱动着RSIC处理器采用更多的方法来提高性能,于是就有了超标量的结构,早期的很多RISC处理器都使用了这种结构,例如MIPS R10000、Alpha 21264和PowerPC 620等处理器,即使到了现在,在嵌入式的高性能应用领域,仍然继续采用了超标量结构,例如MIPS 74K系列处理器、ARM Cortex A9和A15处理器等。
  *Superscalar CISC: 尽管CISC指令集并不容易使用流水线来实现,更很难直接使用超标量结构来实现,但是Intel和AMD采用了一些方法来解决这种问题,使CISC处理器仍然可以每周期执行多条指令,并且采用流水线结构来提高频率,它们所使用的方法就是在处理器内部使用硬件,将一条CISC指令转化为多条RISC指令,这样就可以充分利用RISC指令集的优势了,当然,这比普通的RISC处理器要付出更多的硬件资源,功耗也会偏大,典型的例子就是当代Intel的全系列处理器,例如Pentium 4、Pentium M、Core和Core2等处理器。
    还需要注意的是: 上述的划分只是针对通用的处理器来说的,很多专用领域的处理器,还有其他的架构和指令集,例如VLIW,它们很难保证程序的兼容性,但是在特定的应用场合,的确能获得比通用处理器更好的性能,当然,这不在本书讨论的范围之内。
    在上述的4种结构中,Superscalar RISC处理器的设计是本书重点关注的内容,而这种处理器的流水线则是贯穿本书的主线,一条指令从程序存储器中取出来之后,需要经过流水线的各个阶段,最后才能够得到结果,并更新处理器的状态,本书正是遵循这条指令的轨迹来进行组织的:
    第1章主要介绍普通处理器和超标量处理器的一些背景知识。
    第2章开始讲述Cache,这是由于一般的指令都是从I?Cache中取出来并送到流水线中的,因此流水线始于I?Cache,当然,在处理器中也存在D?Cache,它也会在这一章进行讲述。不同结构的Cache对处理器的性能有着重要的影响,尤其是在超标量处理器中,每周期需要同时执行多条指令,这给Cache的设计带来了一些挑战。
    第3章主要介绍虚拟存储器(Virtual Memory),因为处理器在取指令的时候,如果送出的是虚拟地址,那么首先需要被转化为物理地址,然后才能够取得指令,对数据的访问也是类似的,虚拟存储器是现代操作系统运行的基础,在处理器中需要软硬件配合工作,才可以对虚拟存储器提供完整的支持。
    第4章主要介绍分支预测(Branch Prediction),它也是取指令阶段发生的事情,因为超标量处理器的流水线比较深,导致分支指令的结果在很晚的时间才可以得到,一旦发现这个结果和预想的不一样,那么流水线中很多的指令都是没有用的,需要抹掉并从正确的地址取指令,这样就降低了处理器的执行效率,因此需要对分支指令使用比较准确的预测算法,从而在取指令阶段就可以提前知道分支指令的结果。
    第5章主要讲述指令集体系(ISA),一旦指令从存储器中取出来之后,下一步就需要进行解码了,不同的指令集需要不同的解码方式,因此本书在介绍指令的解码之前,首先对基本的RISC指令集进行介绍,这样便于对后续流水线的理解。
    第6章就对指令解码(Decode)进行了介绍,在超标量处理器中,由于每周期需要对多条指令进行解码,这会引入一些新的问题,比如指令之间存在的相关性,以及一些复杂指令的处理等,相比于普通的处理器,它的解码过程要复杂一些,但是相比于超标量的CISC处理器,这种解码过程仍然是比较简单的。
    第7章主要介绍硬件的寄存器重命名(Register Renaming),指令经过解码之后,就可以得到它的源寄存器和目的寄存器了,但是为了尽量地并行执行指令,需要消除指令之间存在的假的相关性,这些相关性都是和寄存器的名字相关的,通过使用不同的寄存器名字,可以消除这些相关性,于是在处理器内部使用了数量多于指令集中定义的寄存器,称之为物理寄存器,而指令集中定义的寄存器则称为逻辑寄存器,寄存器重命名的过程就是将逻辑寄存器动态地映射到不同的物理寄存器,以消除指令之间存在的假的相关性,从而使这些指令可以并行执行。
    第8章主要介绍指令的发射(Issue),当指令经过寄存器重命名之后,就可以在处理器内部的功能单元(FU)中执行了,但是,为了获得最高的性能,超标量处理器多采用乱序执行的方式,只要一条指令的操作数准备好了,即使它之前的指令还没有准备好,它也可以送到FU中执行,这种方式可以最大限度地利用处理器内部的硬件资源,从而提高处理器的执行效率,而发射阶段正是用来实现这个功能的,所有经过寄存器重命名的指令都会放到一个缓存中,这个缓存称为发射队列(Issue Queue),在其中监测每条指令是否已经准备好了,并按照一定的算法,从那些已经准备好的指令中选择合适的指令送到FU中执行,这个过程就称为发射,指令到了这个阶段,就变为乱序执行了,而在这个阶段之前,都遵循着程序中指定的顺序。
    第9章主要介绍指令在功能单元的执行,指令被发射之后,就会到对应的FU中开始执行,不同种类的指令需要不同的FU,在超标量处理器中,都会使用多个FU,它们可以并行地执行不同的指令,本章除了介绍处理器中常见的FU之外,还会介绍旁路网络(Bypassing Network),它可以缩短相关指令之间执行的时间,但是却使处理器内部的布线资源变得更复杂,因此现代的一些处理器采用了Cluster结构来缓解这种矛盾,同时,访问存储器的load/store指令也需要一些特殊的方法来加速它们的执行速度。
    第10章主要介绍流水线的最后一个阶段: 提交(Commit),指令经过FU的执行而得到结果后,并不会马上使用这个结果对处理器的状态进行更新,这是由于指令的执行是按照乱序来进行的,由于分支预测失败(mis?prediction)和异常(exception)等原因,一条指令的结果未必是正确的,而且,为了使程序在处理器内部的执行看起来和程序中指定的顺序是一样的(这是串行程序必需的),也需要这些乱序执行的指令按照程序中指定的顺序对处理器的状态进行更新,为了实现这个功能,一条指令在FU中执行完毕后,并不会马上对处理器的状态进行更新,而是先将它的结果写到一个缓存中,这个缓存称为重排序缓存(Reorder Buffer,ROB),在流水线的寄存器重命名阶段,每条指令都已经按照程序中指定的顺序写到了ROB中,当一条指令在FU中执行完毕,就可以将这个结果写到ROB对应的地方,当ROB中最旧的那条指令(或者几条指令)已经得到结果,并且不存在分支预测失败或者异常等特殊情况的话,它就可以离开ROB,使用它的结果对处理器的状态进行更新,这个过程称为指令的退休(retire),一旦指令经过了这个状态,它就再也不能够被撤销了。
    第11章介绍现实世界中的一个Superscalar RISC处理器: Alpha 21264处理器,它是处理器发展史上一个非常经典的例子,虽然Alpha系列处理器随着它的东家DEC公司的消失而退出了历史的舞台,但是它影响了之后出现的很多处理器,本章对Alpha 21264处理器进行了详细的介绍。
    由于本书涉及的内容比较多,很多知识点无法详细地展开,读者可以自行对感兴趣的内容进行更深入的学习。
    在本书的编写过程中,编者参阅了各章节所列出的参考文献,在此对原作者表示敬意和感谢。在本书的出版过程中,得到了清华大学出版社的刘向威博士的大力支持,在此特别致以衷心的感谢!
    由于时间仓促和作者水平有限,书中的错误和不妥在所难免,希望广大读者批评指正。
姚永斌
2014年1月于北京


目录
第1章超标量处理器概览
1.1为什么需要超标量
1.2普通处理器的流水线
  1.2.1流水线概述
  1.2.2流水线的划分
  1.2.3指令间的相关性
1.3超标量处理器的流水线
  1.3.1顺序执行
  1.3.2乱序执行
第2章Cache
2.1Cache的一般设计
  2.1.1Cache的组成方式
  2.1.2Cache的写入
  2.1.3Cache的替换策略
2.2提高Cache的性能
  2.2.1写缓存
  2.2.2流水线
  2.2.3多级结构
  2.2.4Victim Cache
  2.2.5预取
2.3多端口Cache
  2.3.1True Multi?port
  2.3.2Multiple Cache Copies
  2.3.3Multi?banking
  2.3.4真实的例子:  AMD Opteron的多端口Cache
2.4超标量处理器的取指令
第3章虚拟存储器
3.1概述
3.2地址转换
  3.2.1单级页表
  3.2.2多级页表
  3.2.3Page Fault
  3.2.4小结
3.3程序保护
3.4加入TLB和Cache
  3.4.1TLB的设计
  3.4.2Cache的设计
  3.4.3将TLB和Cache放入流水线
第4章分支预测
4.1概述
4.2分支指令的方向预测
  4.2.1基于两位饱和计数器的分支预测
  4.2.2基于局部历史的分支预测
  4.2.3基于全局历史的分支预测
  4.2.4竞争的分支预测
  4.2.5分支预测的更新
4.3分支指令的目标地址预测
  4.3.1直接跳转类型的分支预测
  4.3.2间接跳转类型的分支预测
  4.3.3小结
4.4分支预测失败时的恢复
4.5超标量处理器的分支预测
第5章指令集体系
5.1复杂指令集和精简指令集
5.2精简指令集概述
  5.2.1MIPS指令集
  5.2.2ARM指令集
5.3Load/Store指令
  5.3.1Load指令
  5.3.2Store指令
5.4计算指令
  5.4.1加减法
  5.4.2移位指令
  5.4.3逻辑指令
  5.4.4乘法指令
  5.4.5乘累加指令
  5.4.6特殊计算指令
5.5分支指令
5.6杂项指令
5.7异常
第6章指令解码
6.1指令缓存
6.2一般情况
6.3特殊情况
  6.3.1分支指令的处理
  6.3.2乘累加/乘法指令的处理
  6.3.3前/后变址指令的处理
  6.3.4LDM/STM指令的处理
  6.3.5条件执行指令的处理
第7章寄存器重命名
7.1概述
7.2寄存器重命名的方式
  7.2.1使用ROB进行寄存器重命名
  7.2.2将ARF扩展进行寄存器重命名
  7.2.3使用统一的PRF进行寄存器重命名
7.3重命名映射表
  7.3.1基于SRAM的重命名映射表
  7.3.2基于CAM的重命名映射表
7.4超标量处理器的寄存器重命名
  7.4.1解决RAW相关性
  7.4.2解决WAW相关性
7.5寄存器重命名过程的恢复
  7.5.1使用Checkpoint
  7.5.2使用WALK
  7.5.3使用Architecture State
7.6分发
第8章发射
8.1概述
  8.1.1集中式VS分布式
  8.1.2数据捕捉VS非数据捕捉
  8.1.3压缩VS非压缩
8.2发射过程的流水线
  8.2.1非数据捕捉结构的流水线
  8.2.2数据捕捉结构的流水线
8.3分配
8.4仲裁
  8.4.11-of-M的仲裁电路
  8.4.2N-of-M的仲裁电路
8.5唤醒
  8.5.1单周期指令的唤醒
  8.5.2多周期指令的唤醒
  8.5.3推测唤醒  
第9章执行
9.1概述
9.2FU的类型
  9.2.1ALU
  9.2.2AGU
  9.2.3BRU
  9.2.4其他FU
9.3旁路网络
  9.3.1简单设计的旁路网络
  9.3.2复杂设计的旁路网络
9.4操作数的选择
9.5Cluster
  9.5.1Cluster IQ
  9.5.2Cluster Bypass
9.6存储器指令的加速
  9.6.1Memory Disambiguation
  9.6.2非阻塞Cache
  9.6.3关键字优先
  9.6.4提前开始
第10章提交
10.1概述
10.2重排序缓存
  10.2.1一般结构
  10.2.2端口需求
10.3管理处理器的状态
  10.3.1使用ROB管理指令集定义的状态
  10.3.2使用物理寄存器管理指令集定义的状态
10.4特殊情况的处理
  10.4.1分支预测失败的处理
  10.4.2异常的处理
  10.4.3中断的处理
  10.4.4Store指令的处理
  10.4.5指令离开流水线的限制
第11章真实世界的例子:  Alpha 21264处理器
11.1概述
11.2取指令和分支预测
  11.2.1line/way的预测
  11.2.2分支预测
11.3寄存器重命名
11.4发射
11.5执行单元
  11.5.1整数的执行单元
  11.5.2浮点数的执行单元
11.6存储器的访问
  11.6.1Speculative Disambiguation
  11.6.2Load hit/miss Prediction
11.7退休
11.8结论
参考文献

发表于 2014-4-17 12:53:39 | 显示全部楼层
关注
 楼主| 发表于 2014-4-17 22:11:33 | 显示全部楼层
多谢~~
发表于 2014-4-22 12:26:37 | 显示全部楼层
已经买了一本了,貌似还不错,还没细翻。
发表于 2014-4-25 23:42:05 | 显示全部楼层
本帖最后由 michxia 于 2014-4-26 08:49 编辑

恭喜姚兄,一定找时间好好拜读,看你网名就知道对处理器真是情有独钟。(办公室邻桌)
 楼主| 发表于 2014-4-27 07:06:46 | 显示全部楼层
回复 5# michxia


   看ID我就猜到是你啦:)
发表于 2014-5-15 22:02:06 | 显示全部楼层
回复 6# processor


    和這本
现代处理器设计――超标量处理器基础


是差在那????
 楼主| 发表于 2014-5-15 23:23:06 | 显示全部楼层
回复 7# andy2000a


   那本书要讲得更全一些,更像是一本为计算机专业的人看的书,但是它对于超标量处理器流水线的每个阶段并没有非常详细的介绍——当然,如果你本身对超标量处理器内部已经了解的很透彻了,那么可能对于那本书的每句话,你都可以理解到文字背后非常远的地方:举例来说,可能书中只提了在发生分支预测错误时,寄存器重命名的映射表需要进行状态恢复,而只凭这样的一句话,对超标量处理器不了解的人并不会知道这个状态恢复的过程是什么样的,有几种方式可以进行这样的状态恢复——而这是本书所关注的内容。可以这样说:对一个对超标量处理器不了解的人,看完john.P.shen的那本书后,可能还是无法下手去做一个超标量处理器,而看完本书之后——当然也没办法保证你一定就可以下手去做一个超标量处理器——但是起码会更进一步了,尤其是当你去看一些商用的超标量处理器的设计,比如ARM的A9,可能理解起来会更容易一些,不会对RTL代码中出现的br_tag[3:0]这样的信号感到迷惑,其实能做到这一步,读这本书的目的就已经达到了。
  当然,john.P.shen的那本书作为经典教材,在我的这本书中是肯定会引用的,尤其是计算最合适的流水线级数的那一节,在这本书中就直接进行了引用,因为它太经典了,因此本书的第一章,有部分内容和超标量处理器设计基础的那本书是有重复的,不过到了后面的章节,基本上这样的情况就很少了,即使都是在讲分支预测,这本书的讲解思路和那本书也很不一样的,如果是翻版,那么我就没有必要写这本书了。

我认为john.P.shen的那本书,最大的一个亮点,就是其中关于intel P6架构的那一章,这是目前为止能够看到的intel最详细的设计资料了,在那一章甚至可以看到intel将一条store指令拆分为STA和STD两条指令这样的细节,因此这一章是值得细读的。

当然,john.P.shen的那本书还讲了多线程,而本书并没有涉及到这些内容,如果我以后会写第二版的话——我估计也不会涉及到这些内容——而是会把笔墨放到多核方面,起码从目前来看,相比于多线程,多核架构会更受到市场追捧一些,到底这两个技术哪个更好一些?谁知道呢,干脆就多核多线程吧,反正intel就这样做了。
发表于 2014-5-16 09:27:27 | 显示全部楼层
Processor的书详细的多;而且每一章都是几种实现方法的详细介绍和比较,可以系统的来学习;我感觉如果认真看完Processor的书,应该可以写出来一个仿真器应该没有什么问题,这也是我的目标;另外,问问Processor,你那里有超标量的参考代码吗?
发表于 2014-5-16 14:57:01 | 显示全部楼层
已经买了一本,楼主很牛,一定仔细学习一下。
想请问一下楼主实际开发过什么样的处理器?用到了书中的这些技术了吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-28 17:54 , Processed in 0.039816 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表