版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八讲 功能部件1. 有两个32位的二进制数1000,1111,1110,1111,1100,0000,0000,0000和0000,0000, 0000,0000,0000,0000,0000,0000,请分别说出在下列情况下上述两个数的含义a) 补码;b) 无符号数;c) 单精度浮点数;d) 一条MIPS指令。a). 补码: 分别表示-0x70104000和0b). 无符号数;分别表示0x8FEFC000和0d). 一条MIPS指令:分别表示LW R15, 0XC000(R31)以及NOP指令2. 假设每个“非门”、“与非门”、“或非门”的扇入不超过4个且每个门的延迟为T,请给出使用如下不
2、同算法的16位加法器的延迟。a) 串行进位加法器;b) 先行进位加法器;c) 说明为何先行进位加法器能比串行进位加法器快。a). 串行进位加法器;每一级进位传递的延迟为2T,因此生成c16需要32T,每一级产生结果的延迟为3T,因此生成s15需要(30T+3T)=33Tb). 先行进位加法器采用组内并行、组间并行,4位一组,参照第五题RTL代码。延迟共2T(产生p、g)+2T(产生每组P、G)+2T(产生组间进位)+2T(产生组内进位)+ 3T(全加器逻辑)= 11T3. 假设每个“非门”、“与非门”、“或非门”的扇入不超过4个且每个门的延迟为T,请给出使用如下不同算法的把4个16位数相加的延
3、迟。a) 使用多个先行进位加法器;b) 使用加法树及先行进位加法器。a). 使用多个加法器;采用先行进位加法器两两相加,需要2*11T=22T延迟b). 使用加法树及加法器。使用加法树把四个数相加变成两个数相加,需要2级全加器延迟(6T),然后再使用先行进位加法器(11T)得到最后结果,因此共6T+11T=17T延迟。4. 证明X补+Y补=X+Y补假定带符号数x,y,x+y都在n位数表示范围之内,由于求补的本质是取模运算,则它们的补码可以如下表示:x补 = 2n +x, y补 = 2n +y, x+y补 = 2n +x+y ,其中第n+1位舍弃。于是:x补 +y补 = 2n +x+2n +y
4、= 2n + (2n +x+y) = x补 = 2n +x+y补 = x+y补 (第n+1位舍弃)证毕.5. 用Verilog写一个16位的先行进位加法器。moduleadd16(opa,opb,cin,out,cout);input15:0opa;input15:0opb;input cin;output15:0out;output cout;wire15:0p,g;wire14:0c;wire G,P;wireP1,P2,P3,P4;wireG1,G2,G3,G4;/calculate p and gassignp0 = opa0|opb0;assignp1 = opa1|opb1;ass
5、ignp2 = opa2|opb2;assignp3 = opa3|opb3;assignp4 = opa4|opb4;assignp5 = opa5|opb5;assignp6 = opa6|opb6;assignp7 = opa7|opb7;assignp8 = opa8|opb8;assignp9 = opa9|opb9;assignp10 = opa10|opb10;assignp11 = opa11|opb11;assignp12 = opa12|opb12;assignp13 = opa13|opb13;assignp14 = opa14|opb14;assignp15 = opa
6、15|opb15;assigng0 = opa0&opb0;assigng1 = opa1&opb1;assigng2 = opa2&opb2;assigng3 = opa3&opb3;assigng4 = opa4&opb4;assigng5 = opa5&opb5;assigng6 = opa6&opb6;assigng7 = opa7&opb7;assigng8 = opa8&opb8;assigng9 = opa9&opb9;assigng10 = opa10&opb10;assigng11 = o
7、pa11&opb11;assigng12 = opa12&opb12;assigng13 = opa13&opb13;assigng14 = opa14&opb14;assigng15 = opa15&opb15;assign P1 = p3&p2&p1&p0;assignP2 = p7&p6&p5&p4;assignP3 = p11&p10&p9&p8;assignP4 = p15&p14&p13&p12;assignG1 = g3|(p3&g2)|
8、(p3&p2&g1)|(p3&p2&p1&g0);assignG2 = g7|(p7&g6)|(p7&p6&g5)|(p7&p6&p5&g4);assignG3 = g11|(p11&g10)|(p11&p10&g9)|(p11&p10&p9&g8);assignG4 = g15|(p15&g14)|(p15&p14&g13)|(p15&p14&p13&g12);assign G = G4|P4&G3|P
9、4&P3&G2|P4&P3&P2&G1;assign P = P1&P2&P3&P4;assign cout = G|P&cin;/calculate carry assignc3 = G1|P1&cin;assignc7 = G2|(P2&G1)|(P2&P1&cin);assignc11 = G3|(P3&G2)|(P3&P2&G1)|(P3&P2&P1&cin);assignc0 = g0;assignc1 = g1|(p1&g0
10、);assignc2 = g2|(p2&g1)|(p2&p1&g0);assignc4 = g4|(p4&c3);assignc5 = g5|(p5&g4)|(p5&p4&c3);assignc6 = g6|(p6&g5)|(p6&p5&g4)|(p6&p5&p4&c3);assignc8 = g8|(p8&c7);assignc9 = g9|(p9&g8)|(p9&p8&c7);assignc10= g10|(p10&g9)|(p10&p9&
11、amp;g8)|(p10&p9&p8&c7);assignc12 = g12|(p12&c11);assignc13 = g12|(p12&g12)|(p13&p12&c11);assignc14 = g14|(p14&g13)|(p14&p13&g12)|(p14&p13&p12&c11); /calculate sumassignout0 = p0;assignout1 = p1c0;assignout2 = p2c1;assignout3 = p3c2;assignout4 = p4c
12、3;assignout5 = p5c4;assignout6 = p6c5;assignout7 = p7c6;assignout8 = p8c7;assignout9 = p9c8;assignout10 = p10c9;assignout11 = p11c10;assignout12 = p12c11;assignout13 = p13c12;assignout14 = p14c13;assignout15 = p15c14;endmodule6. IEEE-754标准定义了四种格式的浮点数据类型:单精度、扩展单精度、双精度以及扩展双精度。请完成如下列表:参数格式单精度扩展单精度双精度扩展
13、双精度尾数位宽P24 32 53 64 指数最大值Emax+127 1023 +1023 > 16383 指数最小值Emin-126 -1022 -1022 -16382 指数偏移量Bias+127unspecified+1023unspecified指数位数8 11 11 15 浮点格式宽度32 43 64 79 参见:IEEE-754 References7. 下图是包括块间进位生成因子和进位传递因子的四位进位逻辑模块,用该逻辑模块组建64位先行进位加法器的进位逻辑,并证明其正确性。ci+1 = ai*bi+ai*ci+bi*ci = ai*bi+(ai+bi)*ci = gi+pi
14、*ci = gi + gi-1pi + ci-1pi-1pi = gi + gi-1pi + gi-2pi-1pi+ + c0p0p1pi (公式1)gi=ai*bi称为进位生成因子, 只要gi为1, 就有进位,pi=ai+bi称为进位传递因子, 只要pi为1, 就有把低位的进位向前传递下面给出了四位进位传递 c1 = g0+(p0*c0) c2 = g1+(p1*g0)+(p1*p0*c0) c3 = g2+(p2*g1)+(p2*p1*g0)+(p2*p1*p0*c0) c4 = g3+(p3*g2)+(p3*p2*g1)+(p3*p2*p1*g0)+(p3*p2*p1*p0*c0)下图给
15、出了采用四位进位逻辑模块来实现16位的先行进位加法器的逻辑框图。相应的64位加法器根据公式1证明是正确的,其可以采用先行进位加法器实现,也可以采用把64位分为四个组,每个组分别采用16位的先行进位加法器。组和组之间通过行波进位加法器来互连,当然也可以采用多级先行进位加法器来实现,采用组内并行、组间也并行的进位方式。p15-12 g15-12 p11-8 g11-8 p7-4 g7-4 p3-0 g3-0 c0c15-12 c11-8 c7-4 c3-0 c16 c12 c8 c4 p3-0 g3-0 c4 c0c3-0P Gc4 c0P Gc4 c0P G c4 c0P Gp3 g3 c3 p
16、2 g2 c2 p1 g1 c1c16c4 p3-0 g3-0 p3-0 g3-0 p3-0 g3-0c3-0c3-0c3-0c08. 采用Booth编码和Wallace数的乘法器经常需要累加-X补和-2X补。而-X补和-2X补涉及到取反加1的操作。请问乘法器是怎么避免单独加这些1?为了减少这种取反加1的开销,有必要找到一种部分冗余的表达,使得正数和负数有相同的形式,并且很容易从正数产生负数,或者从负数产生正数。通常采用带偏移量的Booth算法。每个部分积在最终累加之前加上一个偏移量常数K。但是最终的结果开始相当于加了零,不会影响到正确性。例如变成K+0, K+Multiplicand,K-2
17、xMultiplicand。K+multiple+Z = 2K, => Z = K-multiple,使得K-multple容易从K+multiple得到。9. (博士)IEEE-754标准定义了四种舍入方式。请分别简要介绍这四种舍入方式。IEEE 754标准:舍入到最接近:将结果舍入为最接近且可以表示的值。 朝+方向舍入:将结果朝正无限大的方向舍入。 朝-方向舍入:将结果朝负无限大的方向舍入。 朝0方向舍入:将结果朝0的方向舍入。 10. (博士)用Verilog写一个8位的补码乘法器,要求采用2位1乘的Booth算法,采用先行进位加法器。modulemul8(opa,opb,resu
18、lt);input7:0opa;input7:0opb;output15:0result;/-BoothEncoder-wirePP0_S,PP1_S,PP2_S,PP3_S;wirePP0_E,PP1_E,PP2_E,PP3_E;wire3:0SelectM,Select2M;wire8:0PP0_M,PP1_M,PP2_M,PP3_M;wire8:0PP0,PP1,PP2,PP3;assignPP0_S = opb1;assignPP1_S = opb3;assignPP2_S = opb5;assignPP3_S = opb7;assignSelectM0 = opb0;assignSe
19、lectM1 = opb1opb2;assignSelectM2 = opb3opb4;assignSelectM3 = opb5opb6;assignSelect2M0 = opb1 & !opb0;assignSelect2M1 = (opb3opb2) & (opb3opb1);assignSelect2M2 = (opb5opb4) & (opb5opb3);assignSelect2M3 = (opb7opb6) & (opb7opb5);assignPP0_E = (opa7=PP0_S) |(opb1:0=2'b0); assignPP1_
20、E = ( (opa7=PP1_S)&(opb3:1!=3'b111) ) | (opb3:1=3'b0);assignPP2_E = ( (opa7=PP2_S)&(opb5:3!=3'b111) ) | (opb5:3=3'b0);assignPP3_E = ( (opa7=PP3_S)&(opb7:5!=3'b111) ) | (opb7:5=3'b0);assignPP0_M = SelectM0? opa7,opa : Select2M0? opa,1'b0 : 9'b0 ; assignPP1_
21、M = SelectM1? opa7,opa : Select2M1? opa,1'b0 : 9'b0 ;assignPP2_M = SelectM2? opa7,opa : Select2M2? opa,1'b0 : 9'b0 ;assignPP3_M = SelectM3? opa7,opa : Select2M3? opa,1'b0 : 9'b0 ;assignPP0 = PP0_S? PP0_M : PP0_M;assignPP1 = PP1_S? PP1_M : PP1_M;assignPP2 = PP2_S? PP2_M : PP2_
22、M;assignPP3 = PP3_S? PP3_M : PP3_M;/-MUL tree,total 16 coloum -wire15:0sum,carry;wirecout0,cout1,cout2,cout3,cout4,cout5,cout6,cout7,cout8,cout9,cout10,cout11,cout12,cout13,cout14,cout15;CSA4_2 W0( .in(2'b0,PP00,PP0_S),.cin(1'b0),.cout(cout0),.s(sum0),.c(carry0) );CSA4_2W1( .in(3'b0,PP01
23、),.cin(cout0),.cout(cout1),.s(sum1),.c(carry1) );CSA4_2 W2( .in(1'b0,PP02,PP10,PP1_S),.cin(cout1),.cout(cout2),.s(sum2),.c(carry2) );CSA4_2W3( .in(2'b0,PP03,PP11),.cin(cout2),.cout(cout3),.s(sum3),.c(carry3) );CSA4_2W4( .in(PP04,PP12,PP20,PP2_S),.cin(cout3),.cout(cout4),.s(sum4),.c(carry4) )
24、;CSA4_2W5( .in(1'b0,PP05,PP13,PP21),.cin(cout4),.cout(cout5),.s(sum5),.c(carry5) );CSA4_2W6( .in(PP06,PP14,PP22,PP30),.cin(cout5),.cout(cout6),.s(sum6),.c(carry6) );CSA4_2W7( .in(PP07,PP15,PP23,PP31),.cin(cout6),.cout(cout7),.s(sum7),.c(carry7) );CSA4_2W8( .in(PP08,PP16,PP24,PP32),.cin(cout7),.c
25、out(cout8),.s(sum8),.c(carry8) );CSA4_2W9( .in(!PP0_E,PP17,PP25,PP33),.cin(cout8),.cout(cout9),.s(sum9),.c(carry9) );CSA4_2W10( .in(!PP0_E,PP18,PP26,PP34),.cin(cout9),.cout(cout10),.s(sum10),.c(carry10) );CSA4_2W11( .in(PP0_E,PP1_E,PP27,PP35),.cin(cout10),.cout(cout11),.s(sum11),.c(carry11) );CSA4_2
26、W12( .in(2'b01,PP28,PP36),.cin(cout11),.cout(cout12),.s(sum12),.c(carry12) );CSA4_2W13( .in(2'b00,PP2_E,PP37),.cin(cout12),.cout(cout13),.s(sum13),.c(carry13) );CSA4_2W14( .in(3'b001,PP38),.cin(cout13),.cout(cout14),.s(sum14),.c(carry14) );CSA4_2W15( .in(3'b000,PP3_E),.cin(cout14),.c
27、out(cout15),.s(sum15),.c(carry15) );/-caculate s+c to get result-wire9:0high_s;wire8:0high_c;assignhigh_s = sum15:6carry14:5;assignhigh_c = sum14:6&carry13:5;add16add16(.opa(high_s,sum5:0),.opb(high_c,PP3_S,carry4:0,1'b0),.cin(0),.out(result); endmodule/-module CSA4_2(in,cin,cout,s,c);input3
28、:0in;inputcin;outputcout;outputs,c;wiretemp;CSA3_2counter0( .in(in2:0),.s(temp),.c(cout) );CSA3_2counter1( .in(in3,temp,cin),.s(s),.c(c) );endmodule/-module CSA3_2(in,s,c);input2:0in;outputs,c;assigns = in0in1in2;assignc = (in0&in1) | (in0&in2) | (in1&in2);endmodule第九讲 存储层次与Cache结构11. 一个
29、处理器页大小为4KB,一级数据Cache大小为64KB,指出在直接相联、二路组相联、以及四路组相联的情况下需要页着色(page coloring) 的地址位数。解:由于一个页的大小是4KB,所以需要的页内偏移为12位;(1) 直接相联:Cache 的(IndexBlock_Offset)的位数为:16位从而page coloring的位数是:16124位;(2) 二路组相联:Cache 的(IndexBlock_Offset)的位数为:15位从而page coloring的位数是:15123位;(3)四路组相联:Cache 的(IndexBlock_Offset)的位数为:14位从而page
30、coloring的位数是:14122位;12. 在一个32位的系统中,采用基于字节的内存寻址方式,Cache访问地址被分为13位的标志(Tag),14位的块索引(Index),5位的字节偏移(Offset)。缺路数a) Cache容量大小是多少个字节?b) Cache映射的方式是什么?假设为两路组相联的cache。offset为5,则cache行大小为2532字节。index为14,则cache行的数目为21416384。a)cache容量的大小为2*16384*32 = 1024KB。b)cache的映射方式为组相联。13. 通过分开指令Cache和数据Cache,能够消除因指令和数据冲突而
31、引起的Cache缺失。现有一个由大小都为32KB的指令Cache和数据Cache组成的系统和另一个大小为64KB的一体Cache组成的系统相比较。假设在所有的存储器访问中数据访问占26%,取指令占74%。32KB指令Cache、数据Cache和64KB的一体Cache每千条指令缺失率分别为1.5、38和40。Cache命中时需要1个时钟周期,缺失代价为100个时钟周期,在一体Cache中,Load和Store命中需要额外一个时钟周期。a) 计算并比较哪一个组织方式有更低的缺失率?b) 求出每种组织方式下的平均存储器访问时间?Answer:a)74%*1.5 + 26% * 38 = 10.99
32、。则分离指令和数据cache的组织方式失效率更低。b) (74%*1.5*100 + 74%*(1000-1.5) + 26%*38*100+26%*(1000-38) )/1000= 14. 在一个顺序执行的主频为1.0GHz的处理器中,L1到L2为写不分配,并且写直达;L2到内存为写分配,并且写回。L1中指令Cache大小为32KB,块大小为32字节,缺失率为2%;数据Cache大小为32KB,块大小为16字节,缺失率为5%,且数据Cache有一个写缓冲,使所有写操作的停顿时间减少了95%。L2大小为512KB,块大小为64字节,缺失率为20%,访问时间是10ns。L2与L1有200MHz
33、的数据总线相连,一个总线周期可传输128字节(位),L2被替换出去的块中有50%为脏块。主存的访问时间为50ns,有128位宽100MHz的数据总线与L2 cache相连。a) 试写出指令存取和读数据的平均内存访问时间的表达式。b) 试写出写数据的平均内存访问时间的表达式。c) 包含存储器访问在内,总的CPI是多少?d) 若要提高该系统运行速度,存储系统的哪些部分需要改进?假设只提高一个参数而其它参数保持不变,需要考虑的参数包括L2的速度、总线的速度、内存的速度和L1以及L2的命中率。Answer:从内存传输一个64字节的cache行需要,1G/100M*4=40拍。从L2 cache写出一个
34、脏块传输的时间同样需要40拍。从L2 cache传输一个cache行到L1 cache需要1G/200M5拍。a)读指令,98%*1+2%*(1-20%)*10+20%*(50+45+20) = 1.6拍。读数据b)写数据(store),95%*1+95%*c)CPI 读指令百分比%*1.6+读数据百分比*2.5+写数据百分比*4.36 = d)L1和L2 cache之间的时钟频率,L2 cache和内存的时钟频率和带宽。写回式L1 cache,非阻塞式cache等等。15. 假定在一个只有64个字的内存中,有一个的内存地址访问序列为:0、1、2、3、4、15、14、13、12、11、10、9
35、、0、1、2、3、4、56、28、32、15、14、13、12、0、1、2、3。对于某个Cache结构,内存访问可以分为Cache命中、强制缺失、容量缺失、冲突缺失,假定下列的Cache参数,上述的访问序列中每次内存访问分别属于哪一类?a) 直接相连,Cache块大小为16个字节,容量大小为4个块。b) 两路组相联,Cache块大小为8个字节,容量大小为4个组,采用LRU替换算法。a)0 3 1619 3235 48514 7 2023 3639 52558 11 2427 4043 56591215 2831 4447 60630(强制缺失)、1(命中)、2(命中)、3(命中)、4(强制缺失
36、)、15(强制缺失)、14(命中)、13(命中)、12(命中)、11(强制缺失)、10(命中)、9(命中)、0(命中)、1(命中)、2(命中)、3(命中)、4(命中)、56(强制缺失)、28(强制缺失)、32(强制缺失)、15(容量缺失)、14(命中)、13(命中)、12(命中)、0(容量缺失)、1(命中)、2(命中)、3(命中)。0 1 8 9 1617 2425 3233 4041 4849 5657 2 3 1011 1819 2627 3435 4243 5051 5859 4 5 1213 2021 2829 3637 4445 5253 6061 6 7 1415 2223 303
37、1 3839 4647 5455 6263 b)0(强制缺失)、1(命中)、2(强制缺失)、3(命中)、4(强制缺失)、15(强制缺失)、14(命中)、13(强制缺失)、12(命中)、11(强制缺失)、10(命中)、9(强制缺失)、0(冲突失效)、1(命中)、2(冲突失效)、3(命中)、4(冲突失效)、56(强制失效)、28(强制失效)、32(强制失效)、15(命中)、14(命中)、13(冲突失效)、12(命中)、0(冲突失效)、1(命中)、2(命中)、3(命中)16. Cache存储层次中多层Cache之间通常可以采用包含式(Inclusion)或者非包含式(Exclusion)关系,例如A
38、MD的Opteron的L1和L2之间采用的非包含式关系,而Intel的Core架构的L1和L2之间采用包含式关系,请比较包含式Cache和非包含式的Cache的特点,包括从存储访问路径、硬件实现复杂性、数据和消息通信量、多核之间一致性的维护等各个角度进行分析。假定只有L1 cache和L2 cache,两层cache层次。包含式关系(inclusive),上层cache的数据包含在下一层cache中。非包含式关系(exclusive),上层cache的数据不包含在下层cache中。包含式cache层次关系,可以简化cache层次的设计,但是一份数据存在多份拷贝,这样导致片上cache的利用率降
39、低。非包含式cache层次关系,cache行只能存在一份拷贝,或者在L1 cache中或者在L2 cache中,可以最大化片上cache的利用率。存储访问路径。包含式cache,L1 cache如果没有命中,需要访问L2 cache,如果L2 cache命中,cache行送入到L1 cache。非包含式cache,如果L1 cache没有命中,则访问L2 cache,如果L2 cache命中,cache行需要送入到L1 cache,同时需要无效掉L2 cache中的拷贝。如果L1 cache和L2 cache都不命中,则从内存直接送到L1 cache,被替换的cache块放置到L2 cache
40、,因此L2 cache相当于L1 cache的victim cache。对于多处理器或者多核设计。包含式cache简化了多处理器中cache一致性问题,如果一个处理器P1需要写,则需要无效掉其它处理器cache的拷贝,P2处理器的L2 cache侦听到无效命令,如果在该L2 cache中,则直接无效掉该cache行,该L2 cache同时发送消息给P2的L1 cache,无效掉L1 cache的cache行。当采用非包含式cache结构,L1 cache需要特定的侦听端口,也就是P2的L2 cache和L1 cache需要同时侦听到P1发出的无效命令。这样会增加片上面积的开销以及增加cache
41、访问的延迟。17. Cache主要是利用程序中的局部性原理,局部性主要包括时间局部性和空间局部性两类。描述一个真实的应用程序,其数据访问层现出下列某一种模式,如果下列模式不可能存在,请阐述理由。a) 几乎没有空间局部性和时间局部性。b) 较好的空间局部性,几乎没有时间局部性。c) 较好的时间局部性,很少的空间局部性。d) 较好的空间和时间局部性。空间局部性,一个数据访问之后,邻近数据在一段时间被访问。时间局部性,一个数据在一段时间内被多次访问。1)几乎没有空间局部性和时间局部性。mcf in SPEC int2000. linked data structure accesses. 2)较好的
42、空间局部性,几乎没有时间局部性。数组的访问。for(i=0; i<N; i+=4) sumi = ai + bi;sumi+1 = ai+1 + bi+1;sumi+2 = ai+2 + bi+2;sumi+3 = ai+3 + bi+3;3)较好的时间局部性,很少的空间局部性。stride数组的访问。for(i=0; i<N; i+=4) sum = ai + sum;sum = ai+10 + sum;sum = ai+20 + sum;sum = ai+30 + sum;4)较好的空间和时间局部性。18. 试列举5种降低Cache缺失代价的技术,说明降低原因;列举5种降低Ca
43、che缺失率的技术,并说明降低原因。CA. 3rd. Pape 449, 19. 回答以下关于Cache的问题:a) 块的放置:在Cache中,根据不同的策略一个块能被放置在哪里?b) 块的标志:如果一个块在Cache中,如何找到它?c) 块的替换:如果没有命中,哪个块该被替换,列举三种策略?d) 写策略:通常有哪两种基本策略来写Cache,写缺失时又有哪两种基本策略?answer:1)块的放置,通常有三种方式,直接相联、组相联和全相联。2)通常通过index来查找cache中的块,例如组相联方式中,需要比较cache的Tag。3)cache行的替换方式,如LRU,Random,FIFO等各种
44、方式。4)cache行的写策略通常包括写回式和写穿透两种方式,在写失效的时候有两种分配方式,write allocate和no-write allocate两种。20. 在一个单处理器系统中,可能存在同一个内存地址的数据存在多个备份引起的数据一致性问题。请分别说明写缓存(Write Buffer)和数据Cache之间一致性的问题,以及数据Cache和内存的数据之间一致性的问题,并给出常见的软硬件解决方法。1)数据cache(两种方式,写回式或者写穿透)和内存之间,通常使用MSI/MESI协议来保证一致性。例如写回式数据cache,写操作,cache行被置为Modified,只有该cache行被
45、替换时才被写入到内存。2)当使用Write Buffer时,必须保证Write Buffer和数据cache之间的一致性,通常Write Buffer在数据cache的下一层。但是,在load和store操作的时候需要同时访问Write Buffer和数据cache,因为在Write Buffer和数据cache中只能保存一份拷贝。3)当采用虚地址cache,当使用虚地址index和虚地址Tag时,需要考虑别名问题。这样采用软件管理TLB方式的方式来消除别名问题。4)I/O操作尤其是DMA传输方式需要考虑数据一致性问题,DMA和CPU相当于多处理器情况下的两个P。通常采用uncache的方式,
46、或者flush cache的方式来维护数据一致性。21. 请编写两个1024*1024大小的矩阵(矩阵元素为double类型)相乘的程序。要求采用分块相乘的技术以提高效率,并分析分块方式和Cache容量之间的关系。解:程序如下: / 由于参数发生了修改,请修正答案。#include <iostream.h>#include <time.h>const int block_size=16; /控制矩阵相乘的块的大小const int array_size=1024;const int subArray_size=(int)array_size/block_size; /求
47、得子数组在每行/列的个数;int temp_arrayblock_sizeblock_size;int array1array_sizearray_size;int array2array_sizearray_size;int resultarray_sizearray_size;void temp_mul(int x1,int y1,int x2,int y2)/结果放到temp_array中; for(int i=0;i<block_size;i+) for(int j=0;j<block_size;j+) for(int k=0;k<block_size;k+) tem
48、p_arrayij += array1x1+iy1+k * array2x2+ky2+j; void matrix_mul() /*分块相乘for(int i=0; i<subArray_size; i+) for(int j=0; j<subArray_size; j+) for(int k=0; k<subArray_size; k+) temp_mul(i*block_size,k*block_size,k*block_size,j*block_size); for(int l=0;l<block_size;l+) for(int m=0;m<block_s
49、ize;m+) resulti*block_size+lj*block_size+m += temp_arraylm; temp_arraylm=0; */ /*int temp;for(int i0=0; i0<array_size; i0+) /完成array2的转置 for(int j0=0; j0<i0; j0+) temp=array2i0j0; array2i0j0=array2j0i0; array2j0i0=temp; for(int i1=0; i1<array_size; i1+) /按行相乘 for(int j1=0; j1<array_size; j1+) for(int k1=0;k1<array_size; k1+) resulti1j1+=array1i1k1*array2j1k1; */int temp1;for(int i2=0; i2<array_size; i2+) /完成array1的转置 for(int j2=0; j2<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广西来宾市忻城县城镇公益性岗位工作人员招聘3人参考笔试题库附答案解析
- 2025中煤智慧科技(张家口)有限公司面向社会公开招聘2人考试参考题库附答案
- 2026年中国大唐集团资本控股有限公司招聘笔试重点题库及答案解析
- 2025江西赣州市章贡区社会保险服务中心招募高校毕业见习生1人参考题库附答案
- 2025中国医学科学院北京协和医学院社会人员招聘26人考试核心试题及答案解析
- 2025江苏先科半导体新材料有限公司招聘11人备考核心题库及答案解析
- 2025广西柳钢集团社会招聘考试备考题库附答案
- 成都东部新区2025年面向全国公开选调事业单位工作人员(40人)考试参考题库附答案
- 2025重庆沪渝创智生物科技有限公司面向社会招聘工作人员5人备考核心题库及答案解析
- 2025天津中医药大学第一附属医院招聘20人备考题库附答案
- 学堂在线 雨课堂 学堂云 海权与制海权 章节测试答案
- 食堂称菜管理办法
- 洪恩识字1-1300字文档
- 社区楼道长管理制度
- 2024年互联网+医疗健康产业合作框架协议
- 寺庙用工合同协议书
- 人工智能在机械设计制造及其自动化中的应用分析
- 电路基础智慧树知到期末考试答案章节答案2024年哈尔滨理工大学
- 2024广西公需课高质量共建“一带一路”谱写人类命运共同体新篇章答案
- 品管圈(QCC)活动成果报告书模板
- 房间维修服务工程项目询价单
评论
0/150
提交评论