计算机系统结构:
经典定义:传统机器程序员所看到的计算机属性,即概念性结构与功能特性,是计算机系统的软、硬件的界面。
广义定义:指令系统结构、组成、硬件
计算机组成:计算机系统结构的逻辑实现
计算机实现:计算机组成的物理实现
按照指令流和数据流的多倍性进行分类。
指令流:计算机执行的指令序列。
数据流:由指令流调用的数据序列。
多倍性:在系统最受限的部件上,同时处于同一执行阶段的指令或数据的最大数目。
Flynn分类法将计算机系统结构分为4类:
单指令流单数据流(SISD)
单指令流多数据流(SIMD)
多指令流单数据流(MISD)
多指令流多数据流(MIMD)
用系统的最大并行度对计算机进行分类。
4类不同最大并行度的计算机系统结构
最大并行度:计算机系统在单位时间内能够处理的最大的二进制位数。
字宽(n位),一次能同时处理的字数(m字)。m×n就表示了其最大并行度。
字串位串:n=1,m=1。(第一代计算机发展初期的纯串行计算机)
字串位并:n>1,m=1。这是传统的单处理机,同时处理单个字的多个位,如16位、32位等。
字并位串:n=1,m>1。同时处理多个字的同一位(位片)。
字并位并:n>1,m>1。同时处理多个字的多个位。
根据并行度和流水线对计算机进行分类。
把计算机的硬件结构分成3个层次
程序控制部件(PCU)的个数k
算术逻辑部件(ALU)或处理部件(PE)的个数d
每个算术逻辑部件包含基本逻辑线路(ELC)的套数w
用公式表示:t(系统型号)=(k,d,w)
进一步改进:t(系统型号)=(k×k’,d×d’,w×w’)
k’:宏流水线中程序控制部件的个数
d’:指令流水线中算术逻辑部件的个数
w’:操作流水线中基本逻辑线路的套数
加快某部件执行速度所能获得的系统性能加速比,受限于该部件的执行时间占系统中总执行时间的百分比。
程序执行时所访问的存储器地址分布不是随机的,而是相对地簇聚。
程序执行时间的90%都是在执行程序中10%的代码。
1、程序的时间局部性:程序即将用到的信息很可能就是目前正在使用的信息。
2、程序的空间局部性:程序即将用到的信息很可能与目前正在使用的信息
在空间上相邻或者临近。
①统一高级语言: 各个机器使用相同的高级语言以实现软件移植,不过较难实现。
②采用系列机:由同一厂家生产的具有相同的系统结构,但具有不同组成和实现的一系列不同型号的机器。
③模拟与仿真:
模拟:用软件的方法在一台现有的机器(称为宿主机)上实现另一台机器(称为虚拟机)的指令集。
仿真:用一台现有机器(宿主机)上的微程序去解释实现另一台机器(目标机)的指令集。
时间重叠、资源重复、资源共享
①时间重叠:引入时间因素,让多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部分,以加快硬件周转而赢得速度。
②资源重复:引入空间因素,以数量取胜。通过重复设置硬件资源,大幅度地提高计算机系统的性能
③资源共享:这是一种软件方法,它使多个任务按一定时间顺序轮流使用同一套硬件设备。
①面向目标程序优化:
对大量的目标程序及其执行情况进行统计分析,找出那些使用频度高、执行时间长的指令或指令串。对于使用频度高的指令,用硬件加快其执行;对于使用频度高的指令串,用一条新的指令来替代。既能减少目标程序的执行时间,也能有效地缩短程序的长度。
②面向高级语言优化:
缩小高级语言与机器语言的语义差距
③面向操作系统优化:
操作系统和计算机系统结构是紧密联系的,操作系统的实现在很大程度上取决于系统结构的支持。
指令系统对操作系统的支持主要有:
处理机工作状态和访问方式的切换;
进程的管理和切换;
存储管理和信息保护;
进程的同步与互斥,信号灯的管理等。
①指令条数少、指令功能简单。只选取使用频度很高的指令,在此基础上补充一些最有用的指令;
②采用简单而又统一的指令格式,并减少寻址方式;指令字长都为32位或64位;
③指令的执行在单个机器周期内完成;(采用流水线机制)
④只有load和store指令才能访问存储器,其它指令的操作都是在寄存器之间进行;(即采用load-store结构)
⑤大多数指令都采用硬连逻辑来实现;
⑥强调优化编译器的作用,为高级语言程序生成优化的代码;
⑦充分利用流水技术来提高性能。
流水线的概念:把一个重复的过程分解为若干个子过程,每个子过程由专门的功能部件来实现。把多个处理过程在时间上错开,依次通过各功能段,这样,每个子过程就可以与其它的子过程并行进行。
流水线特点:
1.流水线将一个任务分解成若干段,每段由一个专门对应的部件来处理
2.流水线中各个段的时间应该尽可能相等,否则会引起流水线堵塞或断流
3.流水线每个段后面要有一个缓冲寄存器,称为流水线寄存器(作用是在相邻的两段之间传送数据,以保证后面要用到的信息,把各个段处理工作相互隔离)
4.流水技术适用于大量重复的的时序过程,只有在输入端不断地提供任务,才能充分发挥流水线的效率。
5.流水线需要有通过时间和排空时间。
(1)通过时间:第一个任务从进入流水线到流出结果所需的时间。
(2)排空时间:最后一个任务从进入流水线到流出结果所需的时间。
从不同的角度和观点,把流水线分成多种不同的种类。
划分标准:按照流水技术用于计算机系统的等级不同
部件级流水线(运算操作流水线):把处理机中的部件分段,再把这些分段相互连接起来,使得各种类型的运算操作能够按流水方式进行。
处理机级流水线(指令流水线):把指令的执行过程按照流水方式处理。把一条指令的执行过程分解为若干个子过程,每个子过程在独立的功能部件中执行。
系统级流水线(宏流水线):把多台处理机串行连接起来,对同一数据流进行处理,每个处理机完成整个任务中的一部分。
划分标准:按照流水线所完成的功能来分类
单功能流水线:只能完成一种固定功能的流水线。
多功能流水线:流水线的各段可以进行不同的连接,以实现不同的功能。
划分标准:按照同一时间内各段之间的连接方式对多功能流水线作进一步的分类
静态流水线:在同一时间内,多功能流水线中的各段只能按同一种功能的连接方式工作。(对于静态流水线来说,只有当输入的是一串相同的运算任务时,流水的效率才能得到充分的发挥)
动态流水线:在同一时间内,多功能流水线中的各段可以按照不同的方式连接,同时执行多种功能。(优点:灵活,能够提高流水线各段的使用率,从而
提高处理速度。缺点:控制复杂。)
划分标准:按照流水线中是否有反馈回路来进行分类
线性流水线:流水线的各段串行连接,没有反馈回路。数据通过流水线中的各段时,每一个段最多只流过一次。
非线性流水线:流水线中除了有串行的连接外,还有反馈回路。
划分标准:根据任务流入和流出的顺序是否相同来进行分类
顺序流水线:流水线输出端任务流出的顺序与输入端任务流入的顺序完全相同。每一个任务在流水线的各段中是一个跟着一个顺序流动的。
乱序流水线:流水线输出端任务流出的顺序与输入端任务流入的顺序可以不同,允许后进入流水线的任务先完成(从输出端流出)。(也称为无序流水线、错序流水线、异步流水线)
把指令执行部件中采用了流水线的处理机称为流水线处理机。
标量处理机:处理机不具有向量数据表示和向量指令,仅对标量数据进行流水处理。
向量流水处理机:具有向量数据表示和向量指令的处理机。向量数据表示和流水技术的结合。
相关:两条指令之间存在某种依赖关系。如果两条指令相关,则它们就有可能不能在流水线中重叠执行或者只能部分重叠执行。
对于两条指令i(在前)和j(在后)
如果下述条件之一成立,则称指令j与指令i数据相关。
(1)指令j使用指令i产生的结果;
(2)指令j与指令k数据相关,而指令k又与指令i数据相关。
数据相关具有传递性。
名:指令所访问的寄存器或存储器单元的名称。
名相关:如果两条指令使用相同的名,但是它们之间并没有数据流动,则称这两条指令存在名相关。
名相关又可以分为:
反相关:如果指令j写的名与指令i读的名相同,则称指令 i 和 j 发生了反相关。
——指令 j 写的名=指令 i 读的名
输出相关:如果指令j和指令i写相同的名,则称指令 i 和 j 发生了输出相关。
——指令 j 写的名=指令 i 写的名
名相关的解决方案:
换名技术:通过改变指令中操作数的名来消除名相关。
对于寄存器操作数进行换名称为寄存器换名。
控制相关:由分支指令引起的相关。
结构冲突:如果某种指令组合因为资源冲突而不能正常执行,则称该处理机有结构冲突。
解决方案:
1.插入暂停周期
2.设置相互独立的IR(指令寄存器),和DR(数据寄存器)或设置相互独立的指令cache和数据cache
数据冲突:当相关的指令靠得足够近时,它们在流水线中的重叠执行或者重新排序会改变指令读/写操作数的顺序,使之不同于它们串行执行时的顺序,则发生了数据冲突。
三种数据冲突:WAR,WAW,RAW
解决方案:
1.通过定向技术减少数据冲突引起的停顿
定向技术的关键思想:在计算结果尚未出来之前,后面等待使用该结果的指令并不真正立即需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其它指令需要它的地方,那么就可以避免停顿。
2.增加流水线互锁机制,插入“暂停”。
3.依靠编译器解决数据冲突:让编译器重新组织指令顺序来消除冲突,这种技术称为指令调度或流水线调度。
控制冲突:
解决方案:
1.处理分支指令最简单的方法:“冻结”或者“排空”流水线,但是这样处理会带来较长的分支延迟。
可采取两种措施来减少分支延迟:
在流水线中尽早判断出分支转移是否成功;
尽早计算出分支目标地址。
3种通过软件(编译器)来减少分支延迟的方法
共同点:
——对分支的处理方法在程序的执行过程中始终是不变的,是静态的。
——要么总是预测分支成功,要么总是预测分支失败。
(1)预测分支失败
允许分支指令后的指令继续在流水线中流动,就好象什么都没发生似的;
若确定分支失败,将分支指令看作是一条普通指令,流水线正常流动;
若确定分支成功,流水线就把在分支指令之后取出的所有指令转化为空操作,并按分支目地重新取指令执行。
(2)预测分支成功
假设分支转移成功,并从分支目标地址处取指令执行。起作用的前题:先知道分支目标地址,后知道分支是否成功。
(3)延迟分支
从逻辑上“延长”分支指令的执行时间。把延迟分支看成是由原来的分支指令和若干个延迟槽构成,不管分支是否成功,都要按顺序执行延迟槽中的指令。
任务:在延迟槽中放入有用的指令
三种调度方法:从前调度,从目标处调度,从失败处调度
在流水线处理机中,设置向量数据表示和相应的向量指令,称为向量处理机。
横向(水平)处理方式
纵向(垂直)处理方式
纵横(分组)处理方式
设置多个功能部件,使它们并行工作;
采用链接技术,加快一串向量指令的执行;
采用循环开采技术,加快循环的处理;
采用多处理机系统,进一步提高性能。
指令级并行(ILP):指令之间存在的一种并行性,利用它,计算机可以并行执行两条或两条以上的指令。
IPC:每个时钟周期完成的指令条数)
循环级并行(LLP):使一个循环中的不同循环体并行执行。
在程序运行时,根据分支指令过去的表现来预测其将来的行为。
——如果分支行为发生了变化,预测结果也跟着改变。
——有更好的预测准确度和适应性。
——预测分支是否成功
——尽快找到分支目标地址(或指令)(避免控制相关造成流水线停顿)
——如何记录分支的历史信息,要记录哪些信息?
——如何根据这些信息来预测分支的去向,甚至提前取出分支目标处的指令?
第四章 p81
第四章 p85
第四章 p92
在每个时钟周期流出的指令条数不固定,依代码的具体情况而定。(有个上限)可以通过编译器进行静态调度,也可以基于Tomasulo算法进行动态调度。
在每个时钟周期流出的指令条数是固定的,这些指令构成一条长指令或者一个指令包。指令包中,指令之间的并行性是通过指令显式地表示出来的。指令调度是由编译器静态完成的。
在每个时钟周期流出的指令条数的上限为n,就称该处理机为n-流出。
指令调度:找出不相关的指令序列,让它们在流水线上重叠并行执行。
循环展开:把循环体的代码复制多次并按顺序排放, 然后相应调整循环的结束条件。开发循环级并行的有效方法
用尾复制技术来构造超块,且超块为只能拥有一个入口,但可以拥有多个出口的结构,这样可以简化补偿代码的生成过程,并降低了指令调度的复杂度。
在VLIW处理器中,相关检测和指令调度工作全部由编译器完成,它需要更“智能”的编译器。
见:第四章 p168
循环携带相关:一个循环的某个叠代中的指令与其他叠代中的指令之间的数据相关。