9.2 RISC计算机
CISC 机器通过减少程序中的指令数达到性能提升的效果, 而RISC则通过将每条指令需要的时钟周期数减至最少来增强计算机的性能.
RISC机器中的寄存器组具有循环使用的特性. 对于具有高度嵌套的程序来说,有可能会占满机器所提供的所有寄存器. 如果发生这种情况, 主存储器就会接管寄存器的工作, 把具有最小编号的寄存器窗口存储在主存储器中, 窗口中所包含的是来自最早过程激活中的值
RISC
CISC
多寄存器组,通常由256个以上的寄存器组成
单寄存器组, 典型的寄存器总数为6到16个
每条指令允许有三个寄存器操作数 (例如, add R1, R2, R3)
每条指令允许有一个或两个寄存器操作数 (例如, add R1, R2)
通过高效率的片上(on-chip) 寄存器窗口实行参数传递
利用低效率的片外 (off-chip) 存储器实现参数传递
单周期指令 (load 和 store除外)
多周期 (multiple-cycle) 指令
硬件连线控制
微程序控制
高度流水线作业
低度流水线作业
数目较少的单指令
数目众多的复杂指令
固定长度指令
可变长度指令
使用编译器解决复杂性问题
利用微代码解决复杂性问题
只有装载和存储指令才能访问存储器
许多指令都可以访问存储器
寻址方式较少
许多寻址方式
9.3 FLYNN 分类方法
今天被大家最广泛接受的分类方法是1972年由 Michael Flynn 提出的分类方法. 富林分类方法 (Flynn's taxonomy) 主要考虑两大因素:指令的数目和流入处理器的数据流的数目. 一台计算机可以有一个或多个的数据流,而且可能是一个或多个处理器在这个数据上工作.这就提供了4种可能的组合: SISD(单指令流,单数据流),SIMD(单指令流,多数据流),MISD(多指令流,单数据流),和MIMD(多指令流,多数据流)
并行体系结构的两个主要范式是 SMP(对称多处理机, symmetric multi-processors) 和 MPP(大量信息并行处理机, massively parallel processors)
MPP = 许多处理器 + 分布式存储器 + 通过网络通信
SMP = 几个处理器 + 共享存储器 +通过存储器通信
9.4 并行和多处理器体系结构
顺序处理的部分越大,则应用一个多重处理的并行结构的效果就会越差.
9.4.1 超标量和 VLIW体系结构
在流水线操作中,将取指-解码-执行周期分成不同步骤(或阶段). 在同一个时间内, 我们会把一组指令分配到不同的步骤中。一个最理想的情形应该是, 每个时钟周期都会有一条指令从流水管道中移出来。但是,由于代码存在分去转移指令以及数据的相互依赖性,所以每个时钟周期都有一条指令输出的目标不可能达到的。
当一个流水线中的步骤的执行只要求少于半个时钟周期时, 就会发生超流水线作业 (superpipelining). 如果内部时钟以两倍的外部时钟的速度运行时, 就能够实现在每个外部时钟周期内完成两个任务.
超流水线作业是超标量体系结构设计的一个方面,超标量(superscalar)是一种允许在一个时钟周期内同时执行多条指令的设计方法.
这种体系结构中的一个关键部件是有一个特殊的取指单元 (instruction fetch unit), 它可以从存储器中同时取出多条指令。 这个单元依次将指令传递给一个综合译码单元 (decoding unit), 以确定这些指令是否是独立的 (独立的指令可以同时执行), 或者是否具有某种类型的相关性的 (在这种情况下,所有的指令不能同时执行).
VLIW处理器会把许多独立的指令包装组合成一条长指令, 这条长指令会依次地告诉执行单元将要做什么.
9.4.2 矢量处理器
矢量处理器(vector processors) 通常被称为超级计算机. 矢量处理器是专门设计的高度流水线作业的处理器.
矢量寄存器 (vector register) 是一种可以一次保存多个向量元素专用的寄存器.
矢量指令之以效率高有两个原因, 首先,机器每次提取较少的指令,其次,处理器知道它会有一个连续的数据来源,并且可以预取出相对应的数据值。
9.4.3 互连网络
消息传输方式有两种:使用共享存储器,或者是采用一个互连网络模型。
消息传递的效率受到下列因素的限制:
- 带宽(bandwidth) ----- 网络传递消息的容量
- 消息延迟 (message latency) ----- 一条消息的第一个位到达目的地所需要的时间
- 传输延迟 (transport latency) ----- 在网络上传输消息所花费的时间
- 开销(overhead) ----- 消息发送者和接收者的消息处理活动
完全连接网络 (completely connected networks) 是指网络中的所有组件都相互连接在一起的网络。
星型网络 (start-connected networks) 有一个中央集线器, 所有消息都必须通过中央集线器进行传递
线性阵列 (linear array) 或 环形网络 (ring networks) 都允许任意一个实体同它的两个邻居实体直接相连,但是任何一个非邻居间的通信都需要穿越多个实体才能到达目的地。环形连接是线性阵列的一个变体, 我们只需要把线性阵列的首尾两个实体直接相连即可.
网状网络 (mesh networks) 是把每一个实体与4或6个邻居实体相连接,其中连接实体的个数取决于是二维网络还是三维网络。
树形网络 (tree networks) 是将实体排列成非循环结构,但是在树的根部会形成了一个潜在的通信瓶颈。
超立方体网络 (hypercube) 是网状网络的多维扩展。 在超立方体网络中每一维都有两个处理器 (超立方体网络通常用来连接处理器, 而不是连接处理器-存储器的集合).
最先进的网络类型,多级互连网络 (multistage interconnection networks) 就是利用2x2开关构建的.
9.5.2 神经网络
神经网络则是基于人脑的并行体系结构. 神经网络试图实现简单的生物神经网络形式。 神经网络代表了一种新的具有高度互连性和简单处理单元的多处理器计算的形式。神经网络可以处理不精确的和随机性的信息, 并且具有某些机制允许处理单元之间发生自适应的相互作用。 神经网络 (或者称为 neural nets)就像生物学的网络一样,可以从经验中学习
神经网络计算机由大量简单的处理单元组成。 每个单元都各自处理一个大问题中的小部分。简单地说,神经网络由处理单元(PE)组成,这些处理单元会将各种输处值乘以不同的权(重)值, 产生一个单一的输出值。与神经网络有关的实际计算过程会让人觉得很简单;一个神经网络真正的处理能力在于互连的PE的并行处理和各组权值的自适应的特性。创建神经网络的困难在于如何确定神经元之间的连接方式,在网络边缘应该设置多大的权值,以及应该如何在这些权值上施加不同的阈值。此外,当神经网络在学习时,可能会出错,当这种情况发生时,这些权值和阈值都必须做出改变以补偿修正这个错误。神经网络的学习算法 (learning algorithm) 是用来管理如何改变这些权值和阈值的一组规则.
9.5.3 脉动阵列
脉动阵列(systolic array)计算机的名字源于它与生活中血液如何有规律地流过心脏的相似情形,脉动阵列计算机是一种处理单元的网络,它通过数据不断在系统中循环而有节奏地对数据进行计算.