计算机系统结构1-3章节 期末背诵内容
Amdahl定律:
加快某部件执行速度所能获得的系统性能加速比,受限于该部件的执行时间占系统中总执行时间的百分比。
加速比依赖于:
可改进比例:在改进前的系统中,可改进部分的执行时间在总的执行时间中所占的比例。
部件加速比:可改进部分改进以后性能提高的倍数。
CPU的性能取决于3个参数
时钟周期时间:取决于硬件实现技术和计算机组成。
CPI:取决于计算机组成和指令集结构。
IC:取决于指令集结构和编译技术。
并行性的含义:
计算机系统在同一时刻或者同一时间间隔内进行多种运算或操作。即只要在时间上相互重叠,就存在并行性。
同时性:两个或两个以上的事件在同一时刻发生。
并发性:两个或两个以上的事件在同一时间内发生。
提高并行性的三种途径:
时间重叠:引入时间因素,让多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部分,以加快硬件周转而赢得速度。(单机系统:指令流水线(部件专用化) ;多机系统:任务流水线(处理机专用化))
资源重复:引入空间因素,以数量取胜。通过重复设置硬件资源,大幅度地提高计算机系统的性能。(单机系统:硬件冗余,多核CPU,多机系统:集群扩展,重复设置处理机)
资源共享:这是一种软件方法,它使多个任务按一定时间顺序轮流使用同一套硬件设备。如,多道程序。 (单机系统:分时操作系统,虚拟内存: ;多机系统:分布式系统)
相关:两条指令之间存在某种依赖关系。(静态属性)
数据相关:(也称真数据相关)(RAW: read after write)
对于两条指令i(在前,下同)和j(在后,下同),如果下述条件之一成立,则称指令j与指令i数据相关:1,指令j使用指令i产生的结果;2,指令j与指令k数据相关,而指令k又与指令i数据相关。(存在数据流动) (可能需要的数据未产生)
名相关: 如果两条指令使用相同的名,但是它们之间并没有数据流动,则称这两条指令存在名相关。(不顺序执行可能引起冲突)
控制相关 : 是指由分支指令引起的相关。为了保证程序应有的执行顺序,必须严格按控制相关确定的顺序执行。(分支预测错误)
冲突:是指对于具体的流水线来说,由于相关的存在,使得指令流中的下一条指令不能在指定的时钟周期执行。(动态属性)
指令级并行主要特点:
是并行性由处理器硬件和编译程序自动识别和利用,不需要程序员对顺序程序作任何修改。( 硬件+软件技术)
静态调度 V.S. 动态调度:
静态调度:是依靠编译器对代码进行调度,也就是在代码被执行之前进行调度;通过把相关的指令拉开距离来减少可能产生的停顿。
动态调度:在程序的执行过程中,依靠专门硬件对代码进行调度,减少数据相关导致的停顿。
指令顺序执行 V.S. 指令乱序执行:
指令顺序执行:指令放入流水线的顺序和指令完成的顺序一致;
指令乱序执行:指令放入流水线的顺序和指令完成的顺序不一致,也就是说有些指令进入流水线后被阻塞的,而在其后进入流水线的指令先完成了。
动态调度解决控制冒险
动态分支预测技术:通过硬件技术,在程序执行时根据每一条转移指令过去的转移历史记录来预测下一次转移的方向。通过提前预测分支方向,减少或消除控制相关导致的流水线停顿。
优点:
根据程序的执行过程动态地改变转移的预测方向,因此有更好的准确度和适应性。
程序每次执行时,可能预测的分支方向与前次相同或不同。更加灵活.
分支历史表BHT : 用BHT来记录分支指令最近一次或几次的执行情况(成功或不成功),并据此进行预测。
分支目标缓冲器BTB : 将分支成功的分支指令的地址和它的分支目标地址都放到一个缓冲区中保存起来,缓冲区以分支指令的地址作为标识。
基于硬件的前瞻执行 : 对分支指令的结果进行猜测,并假设这个猜测总是对的,然后按这个猜测结果继续取、流出和执行后续的指令。只是执行指令的结果不是写回到寄存器或存储器,而是放到一个称为ROB(ReOrder Buffer)的缓冲器中。等到相应的指令得到“确认”(commit)(即确实是应该执行的)之后,才将结果写入寄存器或存储器。
动态调度解决数据冒险
Tomasulo算法 核心思想:
记录和检测指令相关,操作数一旦就绪就立即执行,把发生RAW冲突的可能性减少到最小;
通过寄存器换名来消除WAR冲突和WAW冲突。
cache的3C失效:
针对三种类型的不命中的直接方法
针对强制不命中 -- 增加块大小 (方法一) 缺点:会增加不命中开销,块过大会减少Cache中块的数目,所以有可能会增加冲突不命中。
针对容量不命中 -- 增加Cache容量 (方法二)缺点:增加成本 ; 可能增加命中时间
针对冲突不命中 -- 提高相联度 (方法三)缺点 : 提高相联度是以增加命中时间为代价。
2:1Cache经验规则
容量为N的直接映像Cache的不命中率和容量为N/2的两路组相联Cache的不命中率差不多相同。
其他5个降低Cache不命中率的方法:
伪相联Cache:在逻辑上把直接映像Cache的空间上下平分为两个区。对于任何一次访问,伪相联Cache先按直接映像Cache的方式去处理。若命中,则其访问过程与直接映像Cache的情况一样。若不命中,则再到另一区相应的位置去查找。若找到,则发生了伪命中。否则就只好访问下一级存储器。
硬件预取:常由Cache之外的硬件完成指令or数据的预取
编译器预取:在编译时加入预取指令,在数据被用到之前发出预取请求。
编译器优化:通过对软件进行优化来降低不命中率。1,数组合并 2,内外循环交换 3,循环融合 4,分块
牺牲cache:在Cache和它从下一级存储器调数据的通路之间设置一个全相联的小Cache,称为“牺牲”Cache(Victim Cache)。用于存放被替换出去的块(称为牺牲者),以备重用。
5个降低cache不命中开销的方法:
多级cache: ..
让读不命中优先于写 : 在读不命中时,所读单元的最新值有可能还在写缓冲器中,尚未写入主存。我们可以: 推迟对读不命中的处理,直到写缓冲器清空 ; 检查写缓冲器中的内容,若无相同,且存储器可用,继续处理读不命中
写缓冲合并 : 如果写缓冲器为空,就把数据和相应地址写入该缓冲器。从CPU的角度来看,该写操作就算是完成了。
如果写缓冲器中已经有了待写入的数据,就要把这次的写入地址与写缓冲器中已有的所有地址进行比较,看是否有匹配的项。如果有地址匹配而对应的位置又是空闲的,就把这次要写入的数据与该项合并。这就叫写缓冲合并。如果写缓冲器满且又没有能进行写合并的项,就必须等待。
请求字处理技术 :1, 尽早重启动:请求字没有到达时,CPU处于等待状态。一旦请求字到达,立即送给CPU,让等待的CPU尽早重启动,继续执行。2,请求字优先:调块时,让存储器首先提供CPU所要的请求字。请求字一旦到达,就立即送给CPU,让CPU继续执行,同时从存储器调入该块的其余部分。(如果:Cache块较小 or 下一条指令正好访问同一Cache块的另一部分 用处不大)
非阻塞cache:采用记分牌或者Tomasulo类控制方式,允许指令乱序执行,CPU无需在Cache不命中时停顿
4个降低cache命中开销的方法:
使用小容量、结构简单的Cache
虚拟Cache
Cache访问流水化
踪迹cache
局部性原理
程序执行时所访问的存储器地址分布不是随机的,而是相对地簇聚。
常用的一个经验规则
程序执行时间的90%都是在执行程序中10%的代码。
程序的时间局部性
程序即将用到的信息很可能就是目前正在使用的信息。
程序的空间局部性
程序即将用到的信息很可能与目前正在使用的信息在空间上相邻或者临近。
冯诺依曼体系结构的特点:
计算机由五大部件组成:存储器,运算器,控制器,输入设备,输出设备。
指令和数据以同等地位存于存储器,可按地址顺序访问。
指令和数据用二进制表示。
指令由操作码和地址码组成。
存储程序,程序在计算机中顺序存放。
以运算器为中心。
计算机系统结构设计和分析中常用的3大原则:以经常性事件为重点,程序局部性原理和Amdahl定律