计算机系统结构曹强习题答案_第1页
计算机系统结构曹强习题答案_第2页
计算机系统结构曹强习题答案_第3页
计算机系统结构曹强习题答案_第4页
计算机系统结构曹强习题答案_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章计算机系统结构概述1.1下表1.8给出几种芯片的规格信息,Phoenix是采用7nm技术设计的全新架构,而RedDragon与BlueDragon架构和制程相同,但是优化了设计。(参考附录A内容进行分析及计算)芯片大小(mm2)估计缺陷率(每cm2)N制程(nm)晶体管数量(10亿)核数BlueDragon1800.0312107.54RedDragon1200.041477.54Phoenix2000.04147128Phoenix芯片的成品率是多少?Phoenix为什么比BlueDragon有更高的缺陷率?答案:(1)成品率=1/(1+(0.04/cm2×2cm2))14=0.34(2)因为Phoenix使用最新的工艺,因此缺陷率更高。1.2根据表1.8信息,假设会卖出两种芯片,Phoenix是采用7nm技术设计的全新架构,而RedDragon与BlueDragon架构相同。每块RedDragon无缺陷芯片将获利1000元。每块Phoenix无缺陷芯片将获利2000元。每个晶圆直径是450毫米。(参考附录A内容进行分析及计算)(1)Phoenix的每片晶圆上赚了多少利润?(2)RedDragon每片晶圆能赚多少利润?(3)如果每月需要5万个RedDragon芯片和2.5万个Phoenix,工厂每个月只有70个晶圆,如果晶圆不足,尽量减少芯片产量缺口情况下,如何分配晶圆生产芯片使得利润最大化?答案:(1)Phoenix:每个晶圆上的芯片数量=π×(45/2)2/2—(π×45)/sqrt(2×2)=795—70.7=724.5=724成品率=1/(1+(0.04×2))14=0.340利润为=724×0.34×2000=492320元(2)RedDragon:每个晶圆上的芯片数量=π×(45/2)2/2—(π×45)/sqrt(2×1.2)=1325—91.25=1234成品率=1/(1+(0.04×1.2))14=0.519利润为=1234×0.519×1000=640446元(3)Phoenix芯片数量:25000/724=34.5个晶圆;RedDragon50000/1234=40.5个晶圆因为每个晶圆RedDragon利润高,优先生产40个晶圆,剩余保证Phoenix,需要30个晶圆。1.3实时系统中,执行程序必须在规定执行期限内完成。更快地完成计算没有收益。系统最快执行程序的速度是正常执行速度的两倍。(1)功率不变情况下,以最快速度执行,计算完成后关闭系统,相对于正常执行可以节省多少能耗?(2)设置电压和频率减半时,程序执行时间不变,请问可以节省多少电能?解答:(1)0.5T*P=0.5TP节省50%的功耗。(2)Energy:Energynew/Energyold=(Voltage×1/2)2/Voltage2=可以节省75%的能耗。1.4假设一个四核通用处理器,每个核满载时的功耗为0.5W。对于特定任务,该处理器四核同时工作会加速到单核运行时的8倍。

(1)假设该四核处理器中四个核必须同时同频运行,但可以同时关闭,关闭时不会产生电流泄露。请计算单核和四核工作情况下的工作功率和任务能耗比。当该处理器频率和电压减小到1/8,计算此时的动态功率和能耗下降到正常情况下的比例。为该特定任务设计专用集成电路(ASIC),不使用时能够完全关闭。执行该任务仅需一个通用核心,芯片上剩下部分用于实现专用电路。具体运行时,需要一个核心运行25%的时间,这个核心在剩下75%的时间内会被关停。在这75%的时间内,一个该专用电路运行,仅需要一个核心20%功率。试计算采取新方案和(1)中单核方案的能耗比。解答:(1)单核工作时,需要T时间完成工作。四核同时工作时,仅需要1/8T时间完成任务。四个核需要同时同频工作,四核工作和单个核工作时,功率相同为P。单核工作时,总功耗=PT。四核工作时,功率相同为1/8PT;因此工作功率,单核情况下和四核情况下相同。单核情况下任务能耗是四核情况下的1/8倍。(2)当频率和电压减小到1/8,计算此时的动态功率和能耗。能耗:Energynew/Energyold=(Voltage×1/8)2/Voltage2=动态功率:Powernew/Powerold=0.156×(Frequency×1/8)/Frequency=(3)(1)中单核功耗为P,时间为T。本方案下,0.25T*0.25P+(0.25P*0.75T*0.2)==0.1TP也即是能耗是单核情况下的10%1.5可用性是服务器设计中的最重要考虑事项,其次是可扩展性和吞吐量。(1)有一个服务器,其处理器的寿命为109小时,处理器总故障次数(Failureintime,FIT)为10000。这个系统的平均无故障时间(MTTF)为多少?(2)如果需要1天的时间才能让这个系统再次正常运行,这个系统的可用性是多少?(3)现代数据中心为了降低成本,准备用上述廉价服务器构建一个仓储式计算机。一个具有1000服务器的系统,其MTTF为多少?(假设如果一个服务器发生故障,整个系统就不能工作都会故障)解答:(1)109/10000=105(2)105/(105+24)=99.76%(3)1/(103/105)=100(小时)1.6假设对某一计算机进行了优化,采用增强模式使得程序的特定模块加速了10倍,特定模块占加速后程序50%时间。(1)增强模式下的全局加速比是多少?(2)在未增强模式下,特定模块执行时间占整个程序的多少比例?解答:(1)T未加速时时间=0.5*T加速时间+0.5*T加速时间*10=5.5T加速时间*。因此加速比是5.5倍(2)未加速部分时间在两种情况下相同,加速部分占比为x;由于加速后,未加速部分占50%,(1—x)=x/1010—10x=x10=11x10/11=x=0.911.7假设考虑通过添加专用加密硬件来增强四核处理器功能。该专用加密模块执行加密操作,比正常执行模式快20倍。在非加速情况下,一个程序加密部分执行时间比例为X。(1)X为多少时,加密硬件降低一半的整体执行时间?(2)如果全局加速比为2,硬件加速占整个程序执行时间比例是多少?(3)假设测量了X是50%。为了进一步加快加密速度,计划通过增加第二个加密硬件单元通过并行加密。假设90%的加密操作可以并行,请问相对于不使用加密硬件情况下,此时的全局加速比。解答:(1)2=1/((1—x)+x/20)x=10/19=52.6%(2)(0.526/20)/(0.474+0.526/20)=(3)加密部分的局部加速比为:1/(0.1+0.9/2)=1.82,加密部分的总局部加速比为1.82*20=36.4全局加速比为1/(0.5+0.5/36.4)=1.947或1.951.8加速处理器的某些指令时,可能导致其他指令速度降低的情况。(1)如果新快速浮点单元使浮点运算的速度平均提高2倍,浮点运算占用的时间为原程序执行时间的20%,那么总加速比为多少(忽略对所有其他指令的影响)?(2)现在假定浮点单元的加速会降低数据缓存访问的速度,减缓倍数为1.5(或者说加速比为2/3)。数据缓存访问时间为总执行时间的10%。现在的总加速比为多少?(3)在实现新的浮点运算之后,浮点运算执行时间占总执行时间的比例为多少?数据缓存访问所占比例为多少?解答:(1)1/(0.8+0.20/2)=1.11(2)1/(0.7+0.20/2+0.10×3/2)=1.05(3)浮点运算:0.1/0.95=10.5%,缓存:0.15/0.95=15.8%1.9在实现一个应用程序的并行化时,理想加速比应当等于处理器的个数。但它要受到两个因素的限制:应用程序可并行化部分的百分比和通信成本。Amdahl定律考虑了前者,但没有考虑后者。(1)如果应用程序的80%可以并行化,N个处理器的加速比为多少?(忽略通信成本。)(2)如果每增加一个处理器,通信开销增加原执行时间的0.5%,则8个处理器的加速比为多少?(3)如果处理器数目每增加一倍,通信开销增加原执行时间的0.5%,则8个处理器的加速比为多少?(4)如果处理器数目每增加一倍,通信开销增加原执行时间的0.5%,则N个处理器的加速比为多少?解答:(1)1/(0.2+0.8/N)(2)1/(0.2+8×0.005+0.8/8)=2.94(3)1/(0.2+3×0.005+0.8/8)=3.17(4)1/(.2+logN×0.005+0.8/N)1.10如果某重要程序运行在300MHZ的SuperI处理器上,通过运行仿真器,能够发现指令类型的比例和延迟。如下表所示:指令类型频率(%)周期ALUandLogic401Load201Store102Branches203FloatingPoint106(1) 请计算SuperI的CPI和MIPS。(2) SuperII增加了处理器的时钟频率(450MHZ),但是为了获得更高的时钟频率,设计者不得不增加ALU,Logical和Load指令的CPI到2,浮点指令的CPI到8,请计算相对于SuperI的加速比。(3) 在SuperII的基础上进一步设计SuperIII处理器时,发现所有浮点指令中有20%复杂浮点指令和80%简单浮点指令组成,每条复杂浮点指令的CPI为32,并且可以使用10条简单浮点指令替代,每条简单浮点指令的CPI为32,。那么在SuperIII中取消复杂浮点指令,使用简单浮点指令取代复杂浮点指令,其他不变名,请计算SuperIII的平均CPI。解答:(1)CPI=0.4*1+0.2*1+0.1*2+0.1*6=2;MIPS=300MHZ/2=150MIPS(2)CPI=0.4*2+0.2*2+0.1*2+0.2*3+0.1*8=2.8Speedup=2*450/2.8*300=1.07(3)如下表所示:总的浮点CPI为8,F1的比例是20%,CPI为32,F2的比例为80%,则F2的CPI为2.程序的总指令数为40%+20%+10%+20%+2%*10+8%=108%CPI=(40%*2+40%*2+10%*2+20%*3+(2%*10+8%)*2)/108%=2.37指令类型频率(%)周期ALUandLogic402Load202Store102Branches203F110*20%=22F210*80%=81.11某8核MCPUx能够动态启动和关闭工作的核,假设某一程序80%部分可以并行执行,不考虑L1$,L2$对于计算过程和功耗的影响,CPI在两种情况下都不变;在单核运行时,程序执行的时间为T0,P0为运行功率。下面有两个调度方案,请分别计算该程序运行在两种情况下的实际功耗。(1)只使用一个核,其它核关闭,CPU电压增加10%,主频增加25%;(2)使用全部8个核,CPU电压增加10%,主频不变。解答:T0为程序原来执行的时间,P0为单核执行不改变时的功率,其执行程序的总能耗为W0=T0*P0(1)T1=T0/(1+0.25)=0.8*T0;P1=(1+10%)2*(1+25%)*P0=1.5125*P0W1=T1*P1=1.21W0(2)T2=(20%+80%/8)*T0=30%T0P2=(1+10%)2*8*P0=9.68*P0W2=T2*P2=2.904W0第二章计算机指令集2.1一种RISC-VCPU运行Astar和GCC两种程序,经过实际测量得到每类指令的频率如下表所示。假设60%分支条件成功,请计算实际平均CPI。指令时钟周期AstarGccAverage所有ALU指令146%36%41%载入5存储3分支成功5不成功3跳转3解答:实际CPI=加权求和(指令频率×指令CPI)=(0.41)(1.0)+(0.225)(5.0)+(0.145)(3.0)+(0.19)[(0.6)(5.0)+(1—0.6)(3.0)]+(0.03)(3.0)=2.862.2考虑以下情景的指令编码:处理器的指令长度为14位,有64个通用寄存器,是否有可能实现如下指令编码?如可以,请给出一种编码方法,操作码放在最高位,寄存器地址码放在最低位。

(1)3个两地址指令

(2)63个单地址指令

(3)45个零地址指令解答:一条指令的长度是14位。有64个通用寄存器,因此每个寄存器操作数的地址字段的大小为6位。由于存在带有两个地址的指令,因此为操作码保留了两个最高有效位。标识addr[13:0]用来表示一条指令的14位。首先需要支持3个双地址指令,可以编码如第二行。其次最高2位为11,接下来6位可以表示63个单地址指令,可以编码如第三行。最后最高8为为11,最低6为可以表示45个零地址指令,可以编码如第四行。3个两地址指令‘0’,‘0’,‘00000’to‘00000’to63个单地址指令‘11’‘000000’to‘111110’‘000000’to‘111111’45个零地址指令‘11’‘111111’‘000000’to‘101100’19unusedencodings‘11’‘111111’‘101101’to‘111111’2.3考虑下述C结构体foo。structfoo{chara;boolb;intc;doubled;shorte;floatf;doubleg;char*cptr;float*fptr;intx;};对于32位处理器计算机,foo结构的大小为多少?假定可以任何安排结构成员的顺序,这一结构最小为多少?对于64位处理器计算机?解答:需要考虑对齐策略。在32位处理器上,foo结构由1+1+4+8+2+4+8+4+4+4总共40个字节组成。由于对齐要求,char和bool会被打包并填充两个字节,完成4个字节。第一个int和double类型已经满足对齐要求,因此不需要打包或填充。short将用两个字节填充。其余成员满足对齐边界,所以结构的实际大小是40+2+244字节。要找到结构所需的最小大小,数据成员需要从最宽到最窄排列,见下表。重新排列的结构将首先包含指针和双精度类型,并以bool和char类型结束。此排序不需要填充字节,因此结构的实际大小为40字节。在64位处理器上,结构由1+1+4+8+2+4+8+8+8+4总共48个字节组成。由于对齐要求,char和bool将被打包并填充两个字节,并且还与第一个int打包。双精度和指针类型不需要打包或填充。short将填充两个字节并与浮点数一起打包。最后一个int将需要四个填充字节来满足8字节边界。那么,结构体的实际大小是48+2+2+456个字节。重新排列后结构的最小大小为48字节,因为不需要填充字节。Datasizeon32-bitmachine(bytes)Datasizeon64-bitmachine(bytes)11112244484488482.4—数值5249534356435055用十六进制数字表示,将其存储在64位对齐双字中。(1)使用大端字节顺序写入要存储的值。接下来,逐一解读字节作为ASCII字符并在每个字节下方写入相应的字符,形成字符串。请从左到右给出相应字符串。(2)使用与(1)部分相同的物理排列,使用小端字节顺序存储,接下来,逐一解读字节作为ASCII字符,形成字符串。请从左到右给出相应字符串。解答:(1)RISCVCPU(2)PUVCSCRI2.5考虑到下述C代码和相应的RISC-V代码片段:C代码for(i=0;i<100;i++){

A[i]=B[i]+C;

}RISC-V代码:EX: ADD A1,A0,A0 ;A0=0,初始化i=0SD A1,7000(A0) ;存储iLoop: LD A1,7000(A0) ;取i的值LD A2,3000(A1) ;取B[i]LD A3,5000(A0) ;取CADD A4,A2,A3 ;B[i]+CSD A4,1000(A1) ;存储B[i]+C到A[i]ADD A1,A1,8 ;i增加SD A1,7000(A0) ;存储iADD A5,A0,808 ;i是否是101?BNE A1,A5,loop ;如果不是101,重复loop假设A和B是64位整数数组,C和i是64位整数。假设所有数据值及其地址都保存在内存中(在A、B、C和i的地址分别为1000、3000、5000和7000)。寄存器中的值在迭代之间会丢失。所有地址和字都是64位。(1)程序需要执行多少条指令?(2)程序需要执行多少条访问内存指令?(3)以字节为单位的代码大小是多少?解答:(1)指令的数量为:2+(9×101)=(2)访存指令数量为:=1+(5×101)=506(3)代码长度:=11×4=44bytes第三章指令流水线3.1以下代码段:Loop: ldx1,0(x2) ;地址0+x2载入x1addix1,x1,1 ;x1=x1+1sdx1,0,(x2) ;存储x1到地址0+x2addix2,x2,4 ;x2=x2+4subx4,x3,x2 ;x4=x3-x2bnezx4,Loop ;如果x4!=0则循环假定x3的初始值为x2+396。(1)列出上述代码中的所有数据相关,记录寄存器、源指令和目标指令;例如,从ld到addi,存在对于寄存器x1的数据相关性。

(2)给出这一指令序列对于5级RISC流水线的时序,该流水线没有任何转发或旁路硬件,但假定在同一时钟周期中的寄存器读取与写入通过寄存器组进行“转发”。请画出流水线时空图。假定该分支是通过清空流水线来处理的?如果所有存储器引用耗时1个周期,这一循环的执行需要多少个周期。

(3)给出这一指令序列对于拥有完整转发、旁路硬件的5级RISC流水线的时序。假定在处理分支时,预测分支不成功。如果所有存储器引用耗时1个周期,这一循环的执行需要多少个周期?

(4)给出这一指令序列对于拥有完整转发、旁路硬件的5级RISC流水线的时序。假定在处理分支时,预测分支成功。如果所有存储器引用耗时1个周期,这一循环的执行需要多少个周期?(5)对于一个拥有完整转发、旁路硬件的10级RISC流水线,也就是经典5级流水线的每一级被分为2级,具有数据重定向机制,也就是数据由流水级的末尾转发到需要这些数据的两个流水级的开头。例如,数据从第二执行级的输出转发到第一执行级的输入,仍然导致1个周期的延迟。给出这一指令序列的时空图。假定在处理分支时,预测分支成功。如果所有存储器引用耗时1个周期,这一循环的执行需要多少个周期?(6)假定在一个5级流水线中,最长的流水级需要0.8ns,流水线寄存器延迟为0.1ns。这个5级流水线的时钟周期时间为多少?如果10级流水线将所有流水级都分为两半,那么10级机器的周期时间为多少?(7)利用第(d)、(e)部分的答案,判断该循环在5级流水线和10级流水线上的每指令周期数(CPI)。确保仅计算从第一条指令到达写回级再到最后的周期数。不要计算第一条指令的开始时间。利用第(f)部分计算的时钟周期,计算每种机器的平均指令执行时间。解答:(1)下面是所有的相关 x1 ld x1 daddi x2 ldx2 sd daddix2 dsub daddix4 bnez dsub(2)5段RISC-V流水线时空图123456789 x1,FDXMWdaddix1,x1,FssDXMW x1,FssDXMWdaddix2,x2,FDXMWdsubx4,x3,FssDXMWbnezx4,FssDXMWLDR1, 仅通过寄存器文件转发执行。由于直到执行阶段结束才知道分支结果和目标,因此在此之前进入流水线的所有指令都将被清空。由于x3的初始值为x2+396,并且循环的相等实例将x2加4,因此迭代的总数为99。请注意,包括分支指令在内的RAW冲突增加了8个周期。由于指令刷新,分支后增加两个周期。循环实例之间需要16个周期;循环总数为98*16+18=1584。最后一个循环的最后2个周期不能与其他循环实例重叠。123456789101112131415161718x1,FDXMWx1,x1,FDsXMWx1,FsDXMWx2,x2,FDXMWx4,x3,FDXMWx4,FsDXMW(incorrectFssss x1,FDXM W(3)使用正常重定向操作,在解码之后,能够确定分支结果和分支目标。这次也有99次循环,有2个RAW冲突,在分支发生之后,会发生清空流水线操作。总共花费9*98+12=894。最后一次循环花费3个额外周期。(4)这次也有99次循环,有2个RAW冲突,能够正确预测分支,不会发生清空流水线操作。总共花费8*98+12=796。最后一次循环花费3个额外周期。123456789 x1,FDXMWx1,x1,FDsXMWx1,FsDXMWx2,x2,FDXMWx4,x3,FDXMWx4,FsDXMW x1, (5)在ld和addi之间有3个RAW冲突,在daddi和dsub之间发生1个RAW冲突。因此有分支预测,98个循环。总周期数为10×98+19=999123456789 x1,x1,x1,sssx1,sssx2,x2,sssx4,x3,ssssx4,sx1,sW1(6)5级流水线周期为0.9ns。10级流水线周期为0.5ns。(7)5级流水线CPI为:796/(99×6)=1.34.10级流水线CPI为:999/(99×6)=1.68.5级流水线平均执行时间为:1.34×0.91.21ns10级流水线CPI为:1.68×0.5=.3.2假定分支频率如下所示(以占全部指令的百分比表示):分支条件15%跳转与调用1%成功分支条件60%成功(1)一个4级流水线,其中,无条件分支在第二周期结束时执行,而条件分支则在第三个周期结束时执行。假定第一个流水级总会完成,与是否执行该分支无关,忽略其他流水线停顿,在没有分支冲突的情况下,该流水线CPU比非流水线实现CPU的速度快多少?

(2)一个15级高性能处理器,无条件分支在第五周期结束时执行,条件分支在第十周期结束时执行。第一个流水级总会完成,与是否执行该分支无关,忽略其他流水线停顿,在没有分支冲突的情况下,该流水线CPU比非流水线实现CPU的速度快多少?

解答:(1)4级流水线的理想加速比为4,如果没有分支冲突,就能得到理想加速比。接下来考虑跳转和分支,对于跳转和调用指令,产生1个额外停顿。123456Jumpori+..i+..i+..分支成功情况下,产生2个额外停顿:分支不成功情况下,产生1个额外停顿:123456Not-takeni+..i+..i+...综合起来:Controlflow(perinstruction)Jumpsand1Conditional15%60%=2Conditional(not15%40%=1流水线加速比停顿real=(1×1%)+(2×9%)+(1×6%)=流水线加速比ideal=1/(1+0.24)*4=3.23流水线加速比相对加速比=4/3.23=1.24(2)15级流水线的理想加速比为15,如果没有分支冲突,就能得到理想加速比。和上面相同的分析过程。对于跳转或调用,跳转或调用在第5周期结束时解决,导致4次浪费取指或4次停顿。对于成功的条件分支,直到第10周期结束才解决分支,导致浪费1次取指和8次停顿或9次停顿。对于未成功的条件分支,直到第10周期结束时分支处理完,有8个停顿,而不浪费的取指操作。综合起来:Controlflow(perinstruction)Jumpsand4Conditional15%60%=9Conditional(not15%40%=8实际流水线实现=(4*1%)+(9*9%)+(8*6%)=0.04+0.81+0.48=1.33实际流水线加速比=(1/(1+1.33))*(15)=15/2.33=6.44相对加速比=15/6.44=2.333.3一个采用单周期实现的处理器,时钟周期时间为7ns。在按功能划分流水级时,每个流水级的时钟延迟不一定相同,这个流水线化处理器具体测得的时间数据为:IF,1ns;ID,1.5ns;EX,1ns;MEM,2ns;WB,1.5ns。流水线寄存器延迟为0.1ns。

(1)这个5级流水化机器的时钟周期时间为多少?

(2)如果流水化处理器每4条指令有一次停顿,新机器的CPI为多少?

(3)流水化机器相对于单周期机器的加速比为多少?

(4)如果流水化机器有无限个流水级,每级延迟接近于0,则相对于单周期机器的加速比为多少?解答:(1)2ns+0.1ns=2.1ns(2)5cycles/4instructions=1.25(3)程序执行时间=I×CPI×CycleTime加速比=(I×1×7)/(I×1.25×2.1)=2.67(4)I×1×7/I×1×(N+0.1)=703.4典型5级RISC流水线可以在ID中增加分支计算减少控制冲突停顿,并且通过重定向减轻RAW的停顿。即使有上述优化,分析下述代码,计算分支导致停顿周期。LOOP:x1,#x1=x2-x3,x3,#sum=sum+x2-x2,#x2=x2-x2,x0,#while(x2!=null)keep

解答:分支判定依赖于前面的内存读取LW。停顿2个周期。

3.5假定原CPU是一个5级流水线,其时钟周期为1ns。第二种CPU采用12级流水线,时钟周期0.6ns。由于数据冲突,5级流水线每5条指令经历1次停顿;而12级流水线每8条指令经历3次停顿。此外,分支占全部指令的20%,两台机器的错误预测率都是5%。

(1)仅考虑数据冲突,12级流水线相对于5级流水线的加速比为多少?

(2)如果第一种CPU的分支错误预测代价为2个周期,而第二台机器为5个周期,则每种机器的CPI为多少?由于分支错误预测而导致的停顿考虑在内。

解答:(1)执行时间=I×CPI×CycleTimeSpeedup=(I×6/5×1)/(I×11/8×0.6)=1.45(2)CPI5-stage=6/5+0.20×0.05×2=1.22,CPI12-stage=11/8+0.20×0.05×5=1.425Speedup=(1×1.22×1)/(1×1.425×0.6)=1.173.6下述代码:C代码汇编代码intarray[N]={…};for(inti=0;i<N;i++){if(array[i])array[i]++;}lia0,N laa1,arrayloop: lwa2,0(a1) beqza2,endif addia2,a2,1 swa2,0(a1)endif: addia0,a0,-1 addia1,a1,4 bneza0,loop处理器具有一个512项分支历史表(BHT),被PC[10:2]索引。每条分支历史记录包含2位计数器,初始值是00,如果array={1,0,-3,2,1},请问两个分支(bnez和beqz)在五次循环中的分支预测正确率?请给给出每步计算过程。解答:

bnez分支执行情况如下,预测精度是2/5.StatePredictionActual00NottakenTaken01NottakenTaken10TakenTaken11TakenTaken11TakenNottakenbeqz分支执行情况如下,预测精度是4/5StatePredictionActual00NottakenNottaken00NottakenTaken01NottakenNottaken00NottakenNottaken00NottakenNottaken3.7DAXPY循环程序是高斯消去法中的核心运算。该循环对于一个长度为100的向量实现了向量运算Y=a*X+Y。下面是该循环的MIPS代码:

foo:fldf2,0(x1)载入X(i)fmul.df4,f2,f0求乘积a*X(i)fldf6,0(x2)载入Y(i)fadd.df6,f4,f6求和a*X(i)+Y(i)fsd0(x2),f6存储Y(i)addix1,x1,8递增X索引addix2,x2,8递增Y索引sltiux3,x1,done测试是否完成bnezx3,foo如果没有完成则继续循环假定整数计算在一个时钟周期内发射和完成(包括载入),它们的结果被全旁路,忽视分支延迟。浮点操作延迟如下表所示,假定浮点单元被完全流水化,启动间隔为1。画出时序图的执行时序。显示每条指令的执行时间每个循环迭代耗用多少个时钟周期?从第一条指令进入WB级开始计算,直到最后一条指令进入WB级为止。生成结果的指令使用结果的指令延迟(时钟周期)浮点乘浮点ALU操作6浮点加浮点ALU操作4浮点乘浮点存储5浮点乘浮点存储3整数运算(包括载入)任意0解答:21—5=16cycles/iteration1 1011 1415 L.DF6, IFIDEXMMMUL.DF4,F2, IFID M1M2M3M4M5M6M7MMLDF6, IF EXMMADD.DF6,F4, ID A2A3A4MMS.D0(R2), IF EXMMDADDIUR1,R1, EXMM EXMM EXMM

3.8假定有一个深度流水线处理器,为其实现分支目标缓冲区,仅用于条件分支。假定错误预测的代价都是4个周期,缓冲缺失代价都是3个周期。假定命中率为90%、准确率为90%、分支频率为15%。与分支代价固定为两个周期的处理器相比,采用这一分支目标缓冲区的处理器要快多少?假定每条指令的时钟周期数(CPI))为基本CPI,没有分支停顿。解答:Speedup=CPInoBTB=CPIbase+ CPIbase+StallsnoBTB=15%×2=计算StallsBTBBTB结果BTB预测频率代价缺失15%×10%=3命中正确15%×90%×90%=0命中不正确15%×90%×10%=4因此:StallsBTB=(1.5%×3)+(12.1%×0)+(1.3%×4)=0.097加速比=(1+0.3)/(1+0.097)=1.23.9考虑分支目标缓冲区,正确条件分支预测、错误预测和缓存缺失的代价分别为0、2和2个时钟周期。考虑一种区分条件与无条件分支的分支目标缓冲区设计,而条件分支存储目标地址,对于无条件分支则存储目标指令。(1)当缓冲区中发现无条件分支时,获得多少个时钟周期的收益?(2)假定BTB缓存命中率为90%,无条件分支频率为5%,缓冲区缺失的代价为2个时钟周期。这样可以获得多少收益?解答:(1)由于无条件分支存储是分支目标指令,decode段直接执行分支目标指令,这减少一次分支目标指令的取值操作,因此获得1个时钟周期的收益。(2)5%*(90%*(-1)+10%*2)=-0.035,获得0.035的收益。3.10假定分支目标缓冲的命中率为90%,程序中无条件转移指令为5%,其它指令的CPI为1。假设分支目标缓冲包含分支目标指令,允许无条件转移指令进入分支目标缓冲,则CPI是多少。假定原来的CPI为1.1。解答:(1)原来不采用分支目标缓冲器BTB情况下实际CPI=理想CPI+各种停顿拍数=1+5%×L=1.1解出L=2(2)现在采用分支目标缓冲器BTB情况下实际CPI=理想CPI+各种停顿拍数=1+5%×10%×2=1.01第四章指令级并行表4.1练习4.1至练习4.5的代码与延迟超过一个时钟周期的延迟额外操作延迟Loop:fldf2,0(Rx)存储器fld+3I0:fmul.df2,f0,f2存储器SD+1I1:fdiv.df8,f2,f0整数ADD,SUB+0I2:fldf4,0(Ry)分支+1I3:fadd.df4,f0,f4fadd.d+2I4:fadd.df10,f8,f2fmul.d+4I5:fsdf4,0(Ry)fdiv.d+10I6:addiRx,Rx,8I7:addiRy,Ry,8I8:subx20,x4,RxI9:bnzx20,Loop4.1某CPU必须串行执行指令,也就是在前条指令执行完之前,不会开始执行新指令,请给出表4.11中代码序列执行一次循环迭代的时钟周期。假定每个周期只能发射一条指令,但执行过程不会因为缺少下一条指令而停顿,忽略指令提取与译码过程。假定该分支被成功,并且存在一个时钟周期的分支延迟槽。解答:每次循环执行时间作为基准性能(以周期为单位,每次循环迭代),如果在前一条指令的执行完成之前不能启动新指令的执行。每条指令都必须执行,需要一个时钟周期。在该基数上(11),加上额外的延迟周期(3+4+10+3+2+2+1+1=26),再增加分支延迟(1),合计38时钟周期。4.2如果流水线内部具有多个功能相同单元,不会因为某个功能单元被占用就停顿,仅在检测到真数据相关时,才会产生停顿。但代码是顺序执行,如果前一条指令停顿,后续指令也会停顿。一个时钟周期指令的延迟为1+0,也就是不需要额外的等待状态。那么延迟1+1就意味着1个停顿周期,延迟1+N有N个额外停顿周期。4.1表中代码顺序执行需要多少个时钟周期?解答:(1)4.1代码顺序执行需要23时钟周期。延迟时间1fldf2,0(Rx)1+32<Stallforfld>3<Stallforfld>4<Stallforfld>5fmul.df2,f0,f21+46fdiv.df8,f2,f01+107fldf4,0(Ry)1+38<Stallforfld>9<Stallforfld>10<Stallforfld>11fadd.df4,f0,f41+212<Stallforfdiv>13<Stallforfdiv>14<Stallforfdiv>15<Stallforfdiv>16<Stallforfdiv>17fadd.df10,f8,f21+218fsdf4,0(Ry)1+119addiRx,Rx,8120addiRy,Ry,8121subx20,x4,Rx122bnzx20,Loop1+14.3考虑一种处理器具有两个执行流水线,每条流水线可以在每个时钟周期开始执行一条指令,前端有足够取指/译码带宽,保证连续发射。假定重定向硬件能够在两条流水线之间把结果从一个执行单元转发给另一个单元。每个流水线有独立浮点多功能单元,意味着具有两个能够并行执行的两个浮点操作。流水线执行停顿的唯一原因来源于真正数据相关。现在顺序执行这一循环代码需要多少个周期?解答:答案是(21)22。fld像以前一样首先执行,fdiv.d必须等待四个额外的延迟周期才能执行。fdiv.d之后是fmul.d,它可以与fdiv.d一起在第二个流水线中运行,因为它们之间没有依赖关系。请注意,它们都需要相同的输入f2,并且它们都必须等待f2准备就绪,但它们之间没有关联。fmul.d后面的fld不依赖于fdiv.d和fmul.d,本题是一个双流水线机器,fld在fdiv.d/fmul.d之后的循环中执行。循环后部的循环控制指令也具有并发性,因为它们不依赖于任何长延迟指令。流水线1流水线21fldf2,0(Rx)2<Stallforfld>3<Stallforfld>4<Stallforfld>5fmul.df2,f0,f2<Stallformul>6<Stallformul>7<Stallformul>8<Stallformul>9fdiv.df8,f2,f0fldf4,0(Ry)10<Stallforfdiv><Stallforfld>11<Stallforfdiv><Stallforfld>12<Stallforfdiv><Stallforfld>13<Stallforfdiv>fadd.df4,f0,f41+214<Stallforfdiv><Stallforadd>15<Stallforfdiv><Stallforadd>16<Stallforfdiv>fsdf4,0(Ry)1+117<Stallforfdiv>addiRx,Rx,818<Stallforfdiv>addiRy,Ry,819<Stallforfdiv>subx20,x4,Rx20fadd.df10,f8,f2bnzx20,Loop21<Stallforadd><Stallforbnz>22<Stallforadd>4.4使用上述双流水线机器静态调度表4.11中代码,是否能够得到更短的执行时间?请给出调度后的代码执行示意图。解答:下表展示一种重新排序指令以提高性能的可能方法。这个重新排序的代码需要的周期数是21。流水线1流水线21fldf2,0(Rx)fldf4,0(Ry)2addiRx,Rx,8<Stallforfld>3<Stallforfld><Stallforfld>4<Stallforfld><Stallforfld>5fmul.df2,f0,f2fadd.df4,f0,f46<Stallformul><Stallforadd>7<Stallformul><Stallforadd>8<Stallformul>fsdf4,0(Ry)9<Stallformul>addiRy,Ry,810fdiv.df8,f2,f011subx20,x4,Rx12<Stallforfdiv>13<Stallforfdiv>14<Stallforfdiv>15<Stallforfdiv>16<Stallforfdiv>17<Stallforfdiv>18<Stallforfdiv>19<Stallforfdiv>20bnzx20,Loop21fadd.df10,f8,f24.5从硬件潜力角度来看,循环展开是能够提高双流水线的利用率。请展开表4.11代码两次迭代,然后通过重新排序代码,降低时钟浪费。请写出调度后的代码序列,并给出执行时间解答:(1)下表所示的代码中手动展开循环的两次迭代,执行时间为21次。pipelinepipeline1 2 3 <stallduetoLD4<stallduetoLD<stallduetoLD5fmul.dfadd.d6fmul.dfadd.d7<stallduetoMULD<stallduetoADDD8<stallduetoMULD9<stallduetoMULDfdiv.dfdiv.d<stallduetoDIVD <stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD<stallduetoDIVD <stallduetoDIVDfadd.dfadd.d4.6超长指令字(VLIW)设计者有几个基本关于寄存器使用的体系结构规则选择。假设VLIW是采用自排水流水线设计:一旦操作执行,其结果将在最多L个周期后出现在目标寄存器中(其中L是操作的延迟)。考虑表4.12所示,如果载入操作有1+2周期延迟,如果展开此循环一次,并展示VLIW如何能够每个周期两次加载和两次加法可以使用最少数量的寄存器,请给出代码调度方案实现没有任何流水线中断或停顿。表4.2一段VLIW代码包含两个加、载入和暂停Loop:lwx1,0(x2);lwx3,8(x2)<stall><stall>addix10,x1,1;addix11,x3,1swx1,0(x2);swx3,8(x2)addix2,x2,8subx4,x3,x2bnzx4,Loop解答:周期数ALU0ALU0Ld/stLd/st分支1addix11,x3,2lwx4,0(x0)2addix2,x2,16addix11,x0,2lwx4,0(x0)lwx5,8(x1)3lwx5,8(x1)4addix10,x4,#15addix10,x4,#1swx7,0(x6)swx9,8(x8)6subx4,x3,x2swx7,0(x6)swx9,8(x8)7bnzx4,Loop4.6假设一个五段单流水线结构(IF,ID、EX、MEM、WB)。除了LW、SW和分支,所有操作都是1个周期,LW和SW们是1+2周期,分支指令是1+1周期。没有重定向硬件。给出循环中每个时钟的指令执行情况(1)每次循环迭代有多少时钟周期的分支开销?分支指令实际造成的延迟(从分支ID段开始到取得正确指令时钟周期延迟)是多少?(2)假设采用一个静态分支预测器,能够在解码阶段识别一个后向分支(确定分支方向),也就是预测分支成功。分支指令实际造成的延迟是多少?(3)假设采用一个动态分支预测器(IF段就可以确定分支方向和分支目标地址)。分支指令实际造成的延迟是多少?表4.12循环代码Loop:lwx1,0(x2)addix1,x1,1swx1,0(x2)addix2,x2,4subx4,x3,x2bnzx4,Loop解答:(1)循环执行时间为16个时钟周期。分支产生的延迟为4个周期。没有重定向路径,sub结果需要在W阶段才能获得。循环长度12345678918lwFDEM––WaddiFD––EMWswFDEM––WaddiFDEMWsubFDEMW–bnzx4,FDE––MWlwFD预测分支不成功F动态预测成功F(2)使用静态预测器延迟3个周期。预测分支成功不需要等待Sub结果,仅需要计算分支目标地址EX,就可在下一时钟取值。这导致2个周期延迟。(3)正确的动态预测延迟1个时钟周期,实际没有损失周期,。动态分支预测器会记住,当过去获取分支指令时,它最终变成了一个分支,并采用了这个分支。因此,“预测采取”将在提取分支的同一周期内发生,之后的下一次提取将到达假定的目标。4.7下面是DAXPY循环(双精度aX加Y),它是高斯消元法的核心运算。下面的代码实现DAXPY运算Y=aX+Y,向量长度为100。最初,x1被设置为数组X的基地址,x2被设置为Y的基地址:表4.13DAXPY循环Loop:fldF2,0(x1);(F2)=X(i)fmul.dF4,F2,F0;(F4)=a*X(i)fldF6,0(x2);(F6)=Y(i)fadd.dF6,F4,F6;(F6)=a*X(i)+Y(i)fsdF6,0(x2);Y(i)=a*X(i)+Y(i)addix1,x1,#8;incrementXindexaddix2,x2,#8;incrementYindexsltux3,x1,x4;test:continueloop?bnezx3,foo;loopifneeded假定功能单元的延迟如下表所示。假定在ID阶段解决一个延迟为1周期的分支。假定结果被完全旁路。生成结果的指令使用结果的指令延迟(时钟周期)浮点乘浮点算术运算6浮点加浮点算术运算4浮点乘浮点存储5浮点加浮点存储4整数运算和所有载入任何指令2(1)假定一个单发射流水线。请给出未调度以及对浮点运算、分支延迟进行静态调度之后,该单个循环执行周期数,包含所有停顿或空闲时间周期。在未调度和已调度情况下,结果向量Y中每个元素的执行时间为多少个时钟周期?(2)假定一个单发射流水线。根据需要对循环进行任意次展开,使调度中不存在任何停顿,消除循环开销指令。必须将此循环展开多少次?给出指令调度。结果中每个元素的执行时间为多少?(3)假定一个VLIW处理器,可以同时进行两条访存流水线、两条浮点流水线和整型/分支流水线,也也就是一条指令最多包含5个操作。首先将该循环展开6次,并对其进行调度,使其没有任何停顿(所谓停顿就是完全空闲的发射周期),消除循环开销指令。其次将循环展开10次,忽略分支延迟槽。给出两个调度表。对于每个调度而言,结果向量中每个元素的执行时间为多少?每个调度中,所使用的操作槽占多大比例?两种调度中的代码相差多少?两种调度的总共需要多少寄存器?解答:(1)每个元素执行时间为16个时钟周期;调度之后的代码为10个周期。ClockUnscheduledScheduled1 2 3 4fmul.dfmul.d5 6 7fadd.dfadd.d89bnez f6,- (2)循环展开3次能够消除所有停顿ClockScheduled1 2 3 4fmul.d5 6 7fmul.d8 9 fmul.dfadd.d fadd.d fadd.d f6,- f10,- f14,-(3)循环展开6次能够消除所有停顿referencereferenceIntegeroperation/1fldf1,fldf2,2fldf3,fldf4,3fldf5,fldf6,fmul.dfmul.d4fldf7,fldf8,fmul.dfmul.d5fldf9,fldf10,fmul.dfmul.d6fldf1132(x2)fldf12,40(x2)7addix1,x1,488addix2,x2,489fadd.df7,f7,f1fadd.df8,f8,f210fadd.df9,f9,f3fadd.df10,f10,f411fadd.df11,f11,f5fadd.df12,f12,f612sltux3,x1,x413fsdf7,-48(x2)fsdf8,-40(x2)14fsdf9,-32(x2)fsdf10,-24(x2)15fsdf11-16(x2)fsdf12,-8(x2)bnezx3,foo34个操作15个循环,每次时钟周期为2.67,VLIW效率为34操作/75slots=45.3%。这次调度需要12个浮点寄存器循环展开10次能够消除所有停顿:fPfPIntegerreferencereference121fldf1,fldf2,2fldf3,fldf4,3fldf5,fldf6,fmul.dfmul.d4fldf7,fldf8,fmul.dfmul.d5fldf9,fldf10,fmul.dfmul.d6fldf11,fldf12,fmul.dfmul.d7fldf13,fldf14,fmul.daddi8fldf15,fldf16,addi9fldf17,fldf18,fadd.df11,fadd.df12,f12,fldf19,fldf20,fadd.df13,fadd.df14,f14,fadd.df15,fadd.df16,f16,fadd.df17,fadd.df18,f18,DSLTUfsdf11,-fsdf12,-fadd.df19,fadd.df20,f20,fsdf13,-fsdf14,-fsdf15-fsdf16,-fsdf17-fsdf18,-fsdf19-fsdf20,- bnezx3,54个操作消耗17个时钟周期,每个时钟3.18操作。VLIW效率为54操作/85slots=63.5%。4.8使用Tomasulo算法执行习题4.8中的循环。功能单元延迟如表4.15所示。功能单元类型EX中的循环数功能单元数保留站数整数115浮点加法器1013浮点乘法器1512作出如下假设:□功能单元未实现流水化;□功能单元之间不存在重定向,结果由公共数据总线(CDB)传送;□执行(EX)段既进行有效地址计算,又进行存储器访问执行载入和存储指令。因此,这个流水线为IF/ID/IS/EX/WB;□载入指令需要一个时钟周期;□发射(IS)和写回(WB)结果段各需要一个时钟周期;□共有5个载入缓冲区槽和5个存储缓冲区槽;□假定“等于/不等于0时转移”(BNEZ)指令需要一个时钟周期;(1)单发射TomasuloMIPS流水线的延迟如上表所示。对于该循环的3个迭代,给出每个指令的停顿周期数以及每个指令在哪个时钟周期中开始执行(即,进入它的第一个EX周期)。每个循环迭代需要多少个时钟周期?以表格方式写出答案,表中应当具有以下列标头:□迭代(循环迭代数);□指令;□发射(发射指令的周期);□执行(执行指令的周期);□存储器访问(访问存储器的周期);□写CDB(将结果写到CDB的周期);□注释(对指令正在等待的事件的说明)。在表中给出这个循环的3次迭代,可以忽略第一条指令。(2)重复(1)部分,但这次假设有双发射Tomasulo算法和全流水线浮点单元(FPU)解答:(1)IssuesWriteCDB 1fld12 First1fmul.d24Waitfor MultrsMultuse1fld34 Ldbuf1fadd.d4Waitfor AddrsAdduse1fsd5WaitforF61addi6781addi7891sltu891bnez9Waitfor2fld WaitforLdbuf2fmul.dF4,F2,F011141934WaitforF2MultbusyMultrs[12–19]Multuse[20–33]2fldF6,0(x2)121314 Ldbuf[13]2fadd.dF6,F4,F61335WaitforF445 Addrs[14–35]Adduse[36–44]2fsdF6,0(x2)1446WaitforF6Stbuf[15–46]2addix1,x1,#81516172addix2,x2,#81617182sltux3,x1,x41718202bnezx3,foo1820Waitforx33fldF2,0(x1)192122 WaitforbnezLdbuf[20–21]MultrsMultuse3fld Ldbuf3fadd.dWaitfor AddrsAdduse3fsdWaitforF63addi3addi3sltu3bnezWaitfor(2)IssuesWriteCDB 1fld1231fmul.d14Waitfor MultrsMultuse1fld23 Ldbuf1fadd.d2Waitfor AddrsAdduse1fsd3WaitforF6Stbuf1addi3451addi4561sltu46 INTINTrs1bnez57INTbusyINTrs[6–7]2fld68 Waitfor2fmul.d6Waitfor MultrsMultuse2fld79 INTINTrs2fadd.d7Waitfor AddxSAdduse2fsd8Waitfor2addi8 INTINTrs2addi9 INTINTrs2sltu9 INTINTrs2bnezWaitfor3fld Waitfor3fmul.dWaitfor MultrsMultuse3fld INTINTrs3fadd.dWaitfor AddrsAdduse3fsdWaitforINTrsfullin3addiINTrsfullandbusyINTrs[17]3addiINTrsfullandbusyINTrs[18]3sltuINTrs3bnezINTrs4.9某处理器采用基于全局分支历史两位饱和预测器PR(所有分支共享一个全局分支历史预测器),其预测状态变化如右图所示。处理器执行下述程序段,R1和R2的初始值分别为3和3。预测器PR的初始值为(10)。Project1:{SUBIR1,1+,R1……} X1: BNEQProject1Project2:{SUBIR2,1+,R2……} X2: BNEQProject2X3:假设代码段Project1和Project2中没有分支语句,并且不会修改R1和R2的值。请计算下述情况下,PR的值、预测和实际执行分支的情况,完成填写下表,并给出预测正确率。执行状态预测器PR值预测实际预测成功?初始R1=3R2=3(10)分支成功N/AN/AX1:R1=2X2:R2=3X1:R1=1X2:R2=3X1:R1=0X2:R2=3X2:R1=0X2:R2=2X2:R1=0X2:R2=1X2:R1=0X2:R2=0答:执行状态预测器PR值预测实际预测成功?初始R1=3R2=3(10)分支成功N/AN/AX1:R1=2X2:R2=310分支成功分支成功YX1:R1=1X2:R2=311分支成功分支成功YX1:R1=0X2:R2=311分支成功分支失败NX2:R1=0X2:R2=210分支成功分支成功YX2:R1=0X2:R2=111分支成功分支成功YX2:R1=0X2:R2=011分支成功分支失败N预测正确率为66.6%4.10在下面Tomasulo结构上执行指令,分别计算每条指令写结果阶段的时间(时钟周期数),并画出相应的时空图。R1,R2,R3和F10具有初值。其中BNZ,DADDIU,L.D和S.D的执行过程花费为1时钟周期,而SUB.D/ADD.D的为2个时钟周期,MULT.D的为5个周期,而DIV.D的为10时钟周期。 lw f1, 0(x1)lw f2, 0(x2)fadd.d f3, f1, f2fdiv.d f4, f1, f2fmult.d f5, f3,f10fsub.df6,f4,f10fsd f5, 0(x1)fsd f6, 0(x2)addi x1, x1, #8addi x2, x2, #8bnzx1,x3,Loop解答:12345678910111213141516171819lwf1,0(x1)ISCWlwf2,0(x2)ISCWfadd.df3, f1,f2InSECWfdiv.df4, f1,f2ISEEEEEEEEECWfmult.df5, f3,f10InnSEEEECWfsub.df6,f4,f10ISEEEEEEEECWfsdf5,0(x1)InnnnnnSCWfsdf6, 0(x2)InnnnnnnnSCWaddi x1, x1, #8ISCWaddi x2, x2, #8ISCWbnzx1,x3,LoopISCW第六章外存储系统6.1对于磁盘而言,读写一个1MB数据的平均延迟时间是多少?假设此时磁盘空闲,这样没有排队延迟;平均寻道时间是8ms,顺序传输速度是200MB/s,转速是5400RPM(每分钟旋转圈数),控制器的开销是0.1ms。平均磁盘访问时间=平均寻道时间+平均旋转延迟+传输时间+控制器开销=8ms+0.5/5400RPM+1000/200KB/ms+0.1ms=8ms+5.6ms+5ms+0.1ms=18.7ms6.2大规模数据中心的存储集群中经常使用三副本策略保存数据集,也就是每一个数据集分别有三份拷贝存储在三个独立的节点上,而且这些节点连接到不同的交换机端口,三个副本不在同一个机柜内。假设每个节点的可用性为99%(综合节点、网络等因素)。假设每个节点失效是完全独立的。(1)请问3个副本节点,数据不可用性为多少?(2)如果采用纠删码机制,所有数据以分条方式存储,一个数据分条包含5个数据块,分布在5个独立存储节点中,在一个数据条带中能够最多容忍2个节点上相应数据块错误或者是不可访问,请计算每个数据条带的不可用性是多少?解答:(1)S节点可用性99%S^2=0.98S^3=0.97S^4=0.961S^5=0.951A=3S+2(1–S)S+(1–S)2S=0.99999Triplicatedavail.=3S–3(S)2–(S)3=0.99999Unavailability =(1–S)3=0.01%=10-6(2)A=(S)5+5(1–S)(S)4+10(1–S)2(S)3=0.951+5*0.01*0.961+10*0.0001*0.965=0.99998U=1-0.99998=2*10^-66.3采用RAID01方式组织6块磁盘,单个磁盘可靠性为0.95,请分析系统可靠性。(精确到小数点后4位)。解答:系统可靠性=1-(1-0.953)2=1-0.1426252=1-0.0203=0.986.4一个廉价磁盘冗余阵列由4个磁盘配置为RAID10级,其结构如图6.12所示,采用双控制器(RC)结构,任何一个阵列控制器失效不影响系统工作。已知各部分可靠度为:阵列控制器R1=0.9,通道适配器R2=0.95,磁盘R3=0.95。画出系统可靠性框图;(1)写出系统可靠性R的表达式;(2)计算R的数值(保留小数点后两位)图6.21RAID10结构图解答:(1)可靠性模型如图所示:(2)系统可靠度R=(1—(1—R1)2)×R2×[1—(1—R3)2]2(3)R=[1—(1—R1)2]×R2×[1—(1—R3)2]2=0.99×0.95×[1—(1—0.95)2]2=0.946.5有1个由6块磁盘组成的阵列系统,若每块盘的容量为10TB,每块盘的随机读写带宽为50IOps,则:(1)采用RAID4方式组织时,其有效容量(可用于存放数据而非校验的最大容量)为多少TB?采用RAID6方式组织时呢?(4分)(2)当采用RAID4和RAID5方式组织时,若上层负载为100%随机写,且所有写请求在整个地址空间是均匀分布的,写请求大小与RAID分块大小一致且对齐,试计算系统最大吞吐率(每秒处理的上层IO数,IO是串行执行)。(6分)(1)RAID4容量=10*(6-1)=50TBRAID6容量=10*(6-2)=40TB(2)RAID4,更新写模式:每一个上层写操作,在校验盘以及数据所在数据盘上引起1r1w。此时,校验盘是瓶颈,最大吞吐率=50/2=25IOPS。重建写模式:每一个上层写操作,在校验盘以及数据所在数据盘上引起1w,在其他数据盘上引起1r。此时,所有盘负载均衡,最大吞吐率=50/1=50IOPS。因此,最优方法是做重建写,最大吞吐率为50IOPS。RAID5,RAID5负载已均衡,因此,应采用IO数更少的更新写(4IO)而不是重建写(6IO)。故,最大吞吐率=50*6/4=75IOPS。6.6某服务器的存储子系统包括I/O控制器(带宽为3.0GB/s)和5个SATA3.0控制器(带宽为600MB/s),五个固态盘构成RAID5模式,分条大小为512KB。固态盘写64KB的平均延迟为1毫秒,读64KB的平均延迟为0.5毫秒,I/O控制器根据RAID5算法把用户I/O请求分解到每个固态盘上,然后通过SATA3.0总线将每个请求发送到固态盘接口。假设I/O控制器延迟和SATA3.0总线延迟忽略不计。CPU向存储子系统每秒发出200个512KB的读请求,达到I/O控制器的I/O请求呈泊松分布,假设每个固态盘延迟相同:(1)请计算512KB读请求的服务时间;(2)请计算上述情况下的读请求平均响应时间。解答:(1) 每个盘数据量为512/4=128KB,固态盘128KB读延迟为1毫秒,则512KB读服务时间为2ms。(2) 512KB读服务时间为1ms,通过服务率为1000,使用率为0.2平均响应时间为(0.2/0.8+1)*1=1.25ms第七章数据级并行7.1考虑以下代码,它将两个包含单精度复数值的向量相乘:for(i=0;i<300;i++){c_re[i]=a_re[i]*b_re[i]-a_im[i]*b_im[i];c_im[i]=a_re[i]*b_im[i]+a_im[i]*b_re[i];}假定处理器的运行频率为700MHz,最大向量长度为64。载入/存储单元的启动开销为15个时钟周期,乘法单元为8个时钟周期,加法单元为5个时钟周期。(1)此内核的运算强度为多少?给出理由。(2)将此循环转换为使用分段开采的RV64V汇编代码。(3)假定采用链接和单一存储器流水线,需要多少次钟鸣?每个结果值需要多少个时钟周期(包括启动开销在内)?(4)如果向量序列被链接在一起,每个复数结果值需要多少个时钟周期(包含开销)?(5)现在假定处理器有3条存储器流水线和链接。如果该循环的访问过程中没有组冲突,每个结果需要多少个时钟周期?解答:(1)这个代码每6个浮点操作需要读4个浮点数、写两个浮点数,那么计算密度为6/6=1(2)x1,#initializeloop:v1,#loadv3,#loadv5,#v2,#loadv4,#loadv6,v2,#v5,v5,#a+re*b_re-v5,#storev5,v1,#v6,v2,#v5,v5,#a+re*b_im+v5,#storex1,0,#checkiffirstx1,x1,#firstiteration,incrementbyj#guaranteednextelse:x1,x1,#notfirstiteration,incrementbyskip:x1,1200,#next(3)六次钟鸣 vmul#loadb_im, #subtractandstorec #a_re*b_im,loadnexta_re #a_im*b_re,loadnextb_re #addandstore6(4)每次迭代的总时钟周期=6钟鸣*64元素+15周期(load/store)*6+8周期(乘法)*4+5周期(add/substract)*2=516周期,每个结果=516/128=4(5)增加load/store不会提升性能。1. #2.vmul #a_im*b_im3.vsubvs #su

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论