资源描述
第一章补充
1、用一台40MHZ处理机执行标准测试程序,它含的混合指令数和相应所需的时钟周期数如下:
指令类型
指令数
时钟周期数
整数运算
45000
1
数据传送
32000
2
浮点
15000
2
控制传送
8000
2
求有效CPI、MIPS速率和程序的执行时间。
[解答]
CPI=
=(45000*1+32000*2+15000*2+8000*2)/
(45000+32000+15000+8000)
=1.55周期/指令
MIPS
程序执行时间t:
2、假设在一台40MHZ处理机上运行200,000条指令的目标代码,程序主要由四种指令组成。根据程序跟踪实验结果,已知指令混合比和每种指令所需的指令数如下:
指令类型
CPI
指令混合比
算术和逻辑
1
60%
高速缓存命中的加载/存储
2
18%
转移
4
12%
高速存储缺失的存储器访问
8
10%
计算在单处理机上用上述跟踪数据运行程序的平均CPI。
根据(a)所得的CPI,计算相应的MIPS速率。
[解答]
=2.24
3、假定我们利用增加向量处理模块来提高计算机的运算速度。计算机处理向量的速度比其通常的运算要快20倍。我们将可用向量处理部分所花费的时间占总时间的百分比称为可向量化百分比(原)。
求出加速比S和可向量化百分比F之间的关系式。
当要得到加速比为2时的可向量化百分比F为多少?
[解答]
由Amdahl定律可知:;(1)
由(1)得 :
;(2)
由(2)得
4、某台计算机只有Load/Store 指令能对存储器进行读/写操作,其它指令只对寄存器进行操作。根据程序跟踪实验结果,已知每种指令所占的比例及CPI数如下:
指令类型 指令所占比例 CPI
算逻指令 43% 1
Load指令 21% 2
Store指令 12% 2
转移指令 24% 2
(1) 求上述情况下的平均CPI。
(2) 假设程序有M条指令组成。算逻运算中25%的指令的两个操作数中的一个已在寄存器中,另一个必须在算逻指令执行前用Load指令从存储器取到寄存器。因此有人建议增加另一种算逻指令,其特点是一个操作数取自寄存器,另一个操作数取自存储器,即寄存器¾存储器类型,假设这种指令的CPI等于2。同时,转移指令的CPI变为3。求新指令系统的平均CPI。
[答]
CPI旧=(0.43×1+0.21×2+0.12×2+0.24×2)=1.57
2.原算逻指令中的25%变成了寄存器¾存储器型指令,所以算逻指令(寄存器¾寄存器型)少了(0.25×0.43)M 条,Load指令少了(0.25×0.43)M 条,而(0.25×0.43)M 条的新指令为寄存器¾存储器型指令。指令总数少了(0.25×43%)M条。设执行算逻指令(寄存器¾寄存器型) 、 Load指令、算逻指令(寄存器¾存储器型) 、 Store指令和转移指令的周期总数分别为C1,C2,C3,C4,C5,所以:
C1=(0.43-(0.25×0.43))M×1=0.3225M
C2=(0.21-(0.25×0.43))M×2=0.205M
C3=(0.25×0.43)M×2=0.215M
C4=0.12M×2=0.24M
C5=0.24×3M=0.72M
新指令总数N=(1-(0.25×0.43))M=0.8925M
CPI新=(C1+C2+C3+C4+C5)/ N
=1.7025M/0.8925M
=1.908
第一章:
[习题1.2]如果有一个经解释实现的计算机,可以按功能划分为4级。每一级为了执行一条指令需要下一级的N条指令解释。若执行第一级的一条指令需Kns的时间,那么执行第2、3、4级的一条指令各需要用多少时间?
[解答] 第二级的每条指令需要N条第一级指令进行解释,所以执行一条第二级指令所需要的时间为:
同理有:
[习题1.11]
[解答] 需要考虑的问题主要是相同系列计算机之间的兼容问题,(2)、(5)、(8)是行不通的;而(1)、(3)、(4)、(6)、(7)则可以考虑。
[习题1.12]如果某一计算任务用向量方式求解比用标量方式求解要快20倍,称可用标量方式求解部分所花费时间占总的时间的百分比为可向量化百分比.请画出加速比与可向量化比例两者之间关系的曲线.
[解答] 设可向量化比例为Pvector,则加速比的计算公式表示为:
因此,加速比和可向量化比例图如下:
[习题1.14]
[解答] 将数据代入上面的公式,有:
解之有:
[习题1.16]
[解答] 对该应用程序来说,在90%的时间里,只有50000*10%=5000条指令在运行,其他的45000条指令的平均运行次数很少,因此,我们可以假设对他们来说,Cache总是缺失的.对频繁访问的这10%的指令,我们假设他们访问均匀,这样,Cache的行为便可以认为是均匀覆盖了这些指令.所以,Cache的命中率为:
[习题1.17] 假设高速缓存Cache工作速度为主存的5倍,且Cache被访问命中的概率为90%,则采用Cache后,能使整个存储系统获得多高的加速比Sp?
[解答] 我们首先对新的存储系统的性能做以下的假设:在Cache不命中的情况下,对Cache的访问不会额外损失时间,即:首先,决定Cache是否命中所用的时间可以忽略;其次,在从主存向Cache传输的同时,数据也被传输给使用部件(不需要再从Cache中读取)。这样,新的存储系统中,平均存取时间分为两个部分:
其中,R表示各种情况所占的比例。
根据加速比的计算公式,
第二章习题解答
[习题2.2]
[解答] 在尾数采用补码、小数表示且p=6,阶码采用移码、整数表示且q=6,尾数基rm为16,阶码基re为2的情况下:
最大尾数为:
最小正尾数为:
最小尾数为:
最大负尾数为:
最大阶码为:
最小阶码为:
最大正数为:
最小正数为:
最大负数为:
最小负数为:
浮点零为: 通过上面的计算,我们可以知道浮点零的范围如下:
表数精度为:
表数效率为:
能表示的规格化浮点数个数为:
[习题2.3] [解答] 对于IEEE754的32位单精度浮点数:
如果不把正的无穷数计算在内,那么最大正数为:
最小正数为:
最大负数为:
如果不把负的无穷数计算在内,那么最小负数为:
表数精度为:
由于尾数的基数是2,所以表数效率为50%。
对于IEEE754的64位单精度浮点数:
如果不把正的无穷数计算在内,那么最大正数为:
最小正数为:
最大负数为:
如果不把负的无穷数计算在内,那么最小负数为:
表数精度为:
由于尾数的基数是2,所以表数效率为50%。
[习题2.5] 一台计算机系统要求浮点数的精度不低于10-7.2,表数范围正数不小于1038,且正、负数对称。尾数用原码、纯小数表示,阶码用移码、整数表示。
设计这种浮点数的格式
计算(1)所设计浮点数格式实际上能够表示的最大正数、最大负数、表数精度和表数效率。
[解答] 为了方便和提高精度,我们取尾数和阶码的基都为2,即: 且
根据表示数精度的要求:
于是可以取p=24;
根据表示数范围的要求:
即
因此可以取q=7
数据格式可以表示如下:
1位
1位
7位
24位
符号
阶符
阶码
尾数
(2)能够表示的最大正数:(1-2-24)2127,
能够表示的最大负数:-2-129,
表示数的精度:2-24,
表数效率:50%。
[习题2.6] [解答]
在两种标准下面,0.2分别表示为:
IBM标准:
编码为:
IEEE754标准:
编码为:
(3)略,注意两种标准表数的范围和表数的精度是不相同的。
[习题2.10] [解答] 我们可以计算出数据的大致数量:
1000条指令访问的数据总数为1000*2=2000个;
每个数据平均访问8次,所以,不同的数据个数为:
对于A处理机,所用的存储空间的大小为:
对于B处理机,指令字长由32位变为了30位(条数由256减少到64),这样,所用的存储空间的大小为:
由此我们可以看出,由于数据的平均访问次数要大于指令,所以,通过改进数据的格式来减少指令的长度,可以减少总的存储空间大小。
[习题2.14] 一台模型机共有7条指令,各指令的使用频率分别为35%,25%,20%,10%,5%,3%和2%,有8个通用数据寄存器,2个变址寄存器。
要求操作码的平均长度最短,请设计操作码的编码,并计算所设计操作码的平均长度。
设计8字长的寄存器-寄存器型指令3条,16位字长的寄存器-存储器型变址寻址方式指令4条,变址范围不小于±127。请设计指令格式,并给出各字段的长度和操作码的编码。
[解答] (1)要使得到的操作码长度最短,应采用Huffman编码,构造Huffman树如下:
0.35
0.25
0.20
0.10
0.05
0.03
0.02
0.05
0.10
0.20
0.40
0.60
1.00
0 1 0 1
0 1
0 1
0 1
0 1
由此可以得到7条指令的编码分别如下:
指令号
出现的频率
编码
1
35%
00
2
25%
01
3
20%
10
4
10%
110
5
5%
1110
6
3%
11110
7
2%
11111
这样,采用Huffman编码法得到的操作码的平均长度为:
H = 2×(0.35+0.25+0.20) + 3×0.10 + 4 ×0.05 + 5×(0.03 + 0.02)
= 1.6+0.3+0.2+0.25
=2.35
(2)设计8位字长的寄存器-寄存器型变址寻址方式指令如下:
因为只有8个通用寄存器,所以寄存器地址需3位,操作码只有两位,设计格式如下:
2 3 3
操作码OP
源寄存器R1
目的寄存器R2
三条指令的操作码分别为00,01,10
设计16位字长的寄存器-存储器型变址寻址方式指令如下:
4 3 1 8
操作码OP
通用寄存器
变址寄存器
偏移地址
四条指令的操作码分别为1100, 1101,1110,1111
[习题2.15] 某处理机的指令字长为16位,有双地址指令、单地址指令和零地址指令三类,并假设每个地址字段的长度均为6位。
如果双地址指令有15条,单地址指令和零地址指令的条数基本相同,问单地址指令和零地址指令各有多少条?并且为这三类指令分配操作码。
如果要求三类指令的比例大致为1:9:9,问双地址指令、单地址指令和零地址指令各有多少条?并且为这三类指令分配操作码。
[解答]
首先,我们可以根据指令地址的数量来决定各种指令在指令空间上的分布:
如果我们按照从小到大的顺序分配操作码,这样,按照指令数值从小到大的顺序,分别为双地址指令、单地址指令和零地址指令。
其次可以根据指令的条数来大致的估计操作码的长度:
双指令15条,需要4位指令来区分,剩下的12位指令平均分给单地址和零地址指令,每种指令可以用6位指令来区分,这样,各指令的条数为:
双地址指令15条,地址码:0000~1110;
单地址指令26-1=63条,地址码:1111 000000~1111 111110;
零地址指令64条,地址码:1111 111111 000000~1111 111111 111111。
(2)与上面的分析相同,可以得出答案:
双地址指令14条,地址码:0000~1101;
单地址指令26*2-2 = 126条,1110 000000~1110 111110,1111 000000~1111 111110;
零地址指令128条1111 111111 000000~1111 111111 111111。
第三章习题解答
[习题3.1] 设有一个两层的存储器层次结构:M1和M2。M1的命中率用h表示,并分别令c1和c2为每千字节的成本,s1和s2为存储器容量,t1和t2为存取时间。
在什么条件下,整个存储器系统的平均成本会接近于c2?
该层次结构的存储器有效存取时间ta是多少?
令两层存储器的速度比r=t2/t1,并令E=t1/ta为存储系统的存取效率。试以r和命中率h来表示E。
试分别画出r=5、20和100时,E和h的关系图。
如果r=100,为使E>0.95,要求的命中率h是多少?
(5)中的命中率实际上很难达到,假设实际的命中率只能达到0.96。现在采用一种缓冲技术来解决这个问题。当访问M1不命中时,把包括被访问数据在内的一个数据块都从M2取到M1中,并假设被取到M1中的每个数据平均可以被重复访问5次。请设计缓冲深度(即每次从M2取到M1中的数据块的大小)。
[解答]
(1)整个存储系统的平均成本为:
不难看出:当s1/s2非常小的时候,上式的值约等于c2。即:s2s1时,整个存储器系统的平均成本会接近于c2
(2) ta = h1t1 +(1 – h1)h2t2
因为h2等于1,所以ta = ht1 +(1 – h)t2
(3)
(4)
(5) 将数值代入E和h的关系式可以算得h>99.95% 。
通过缓冲的方法,我们需要将命中率从0.96提高到0.9995。假设对存储器的访问次数为n,缓冲块的大小为m。那么,缓冲的次数为0.0005n次;所以通过对M1的命中率来列等式有:
解这个方程有:
所以要达到(5)中的访问效率,缓冲的深度应该至少是16(个数据单位)。
[习题3.3]要求完成一个两层存储系统的容量设计。第一层M1是高速缓存,其容量有三种选择:64K字节、128K字节和256K字节。第二层M2是主存储器,其容量为4M字节。分别令c1和c2是每个字节的成本,t1和t2是M1和M2的存取时间。假定c1=20c2和t2=10t1,三种容量高速缓存的命中率分别为0.7,0.9和0.98。
在t1=20ns的条件下,三种高速缓存的平均存取时间ta是多少?(注意:t1是从CPU到M1的时间。t2是从CPU到M2的时间,不是从M1到M2的时间)。
如果c2=0.2美圆/K字节,试说明整个存储器层次结构的平均字节成本。
对三种存储器的设计作一个比较,并分别按平均成本和平均存取时间指出它们性能的排列次序。再根据平均成本和平均存取时间的乘积,选择最佳设计。
[解答]
(1)ta = ht1 +(1 – h)t2 =(10 – 9h)t1 ,所以
ta1 = (10 – 9*0.7)*20 = 74ns
ta2 = (10 – 9*0.9)*20 = 38ns
ta3 = (10 – 9*0.98)*20 = 23.6ns
(2)因为平均字节成本ca为:
将各个值代入可得:ca1=0.26美元/K字节,ca2=0.32美元/K字节,ca3=0.43美元/K字节。
(3)
按照平均成本来说ca1< ca2< ca3,按照平均存取时间来说ta3< ta2< ta1。如果根据平均成本和平均存取时间的乘积(ca1*ta1=19.24, ca2*ta2=12.16, ca3*ta3=10.15)来计算的话,则第三种方案是最佳的。
[习题3.7]
[解答]
各种存储器的地址格式如下:
方式1:16个模块高位交叉
方式2:16个模块并行访问
方式3:16个模块低位交叉
方式4:2路高位交叉8路低位交叉
16个存储模块每8个组成一个大的模块:
方式5:4路高位交叉4路低位交叉
16个存储模块每4个组成一个大的模块:
方式6:4路并行访问4路低位交叉
这几种存储器都能够并行工作,因此可以提高频带宽度。
总的来说,并行访问存储器的优点是实现简单、容易,缺点是访问冲突大;
高位交叉访问存储器的优点是扩充方便,缺点是访问效率不高;
低位交叉访问存储器可以用分时的方法来提高速度,但扩充不方便。
各种存储器的频带宽度和他们的工作频率有关,在不考虑冲突的情况下,如果有足够多的独立控制电路和寄存器,那么,他们的频带宽度是相同的。
存储器的逻辑示意图略。
注意,并行访问存储器和低位交叉访问存储器很相象,只不过,并行访问存储器使用存储模块号(存储体号)来对已经输出的结果进行选择,而低位交叉访问存储器则用来生成对存储模块(存储体)的片选信号,他通过流水的方式来提高访问的速度。
[习题3.13]一个虚拟存储器按字节编址,最多有256个用户,每个用户最多要用4096页,每页1K字节。主存容量16M字节,快表按地址访问,共32个存储字,快表地址码经散列变换得到,为减少散列冲突,快表分为两组,有两套独立的相等比较电路。
写出多用户虚地址和主存地址的格式,并标出各字段的长度。
散列变换部件的输入位数和输出位数各为多少?
每个相等比较电路的位数是多少?
快表每个存储字的总长度为多少位?为哪几个字段?各字段的长度为多少位?
画出多用户虚地址经快表变换成主存地址的逻辑示意图。
[解答]
虚地址的长度为30位,格式如下:
主存的地址需要24位:格式如下
由于用户号和虚页号共有20位,所以,散列变换的输入需要20位,而输出的为快表的地址,如果我们假设快表是按照字寻址,那么是4位(快表分为两组,每组16个存储字)。
相等比较电路需要比较多用户虚页号,以消除散列冲突,所以,相等比较电路需要20位。
快表中需要存储两项内容:多用户虚页号和实页号。多用户虚页号为20位,实页号为14位,共有34位。
见课本(计算机系统结构(第二版),郑纬民、汤志中,清华大学出版社)图3.29。
[习题3.15]
[解答]
在分配的主存页面数目大于等于5的情况下,这时,除了第一次调入不命中,以后的访问均命中,可以达到最高的页面命中率:实际命中的次数为7次,所以可能达到的最高页面命中率为:
由于在页面数大于等于5的情况下,肯定可以达到最高命中率,所以我们来看页面数小于5时能否达到该命中率:
分配的主存页面数等于4时,调度过程如下:
LFU算法
4
4
4
4
4*
1
1
1
1
1*
1
1
命中7次
5
5
5*
5
5
5
5
5*
5
5
5
3
3
3
3*
3
3*
3
3
3*
3
2
2
2
2*
2
2
2
2
2
调入
调入
调入
调入
命中
调入
命中
命中
命中
命中
命中
命中
此时也可以达到最高命中率;
分配的主存页面等于3时,调度过程如下:
LFU算法
4
4
4*
2
2
2*
3
3*
3
3
3*
3
命中3次
5
5
5*
5
5
5*
2
2
2*
1
1
3
3
3*
1
1
1
1*
5
5
5
调入
调入
调入
调入
命中
调入
调入
调入
命中
调入
调入
命中
此时不能达到最高命中率。
所以至少应该分配4个主存页面。
我们假设程序每次只访问一个存储单元,这样,对每一个特定页面的访问过程可以描述如下:
因为第一次总是不命中的,而平均起来,随后的1023次总是命中的,然后再次被调出主存,并再次重复先前的过程。
所以访问存储单元的命中率为:
[习题3.19] 假设在一个采用组相联映象方式的Cache中,主存有B0~B7共8块组成,Cache有2组,每组2块,每块的大小为16个字节,采用LFU块替换算法。在一个程序执行过程中依次访问这个Cache的块地址流如下:
B6,B2,B4,B1,B4,B6,B3,B0,B4,B5,B7,B3
(1) 写出主存地址的格式,并标出各字段的长度。
(2) 写出Cache地址的格式,并标出各字段的长度。
(3) 画出主存与Cache之间各个块的映象对应关系。
(4) 如果Cache的各个块号为C0、C1、C2和C3,列出程序执行过程中Cache的块地址流情况。
(5) 如果采用FIFO替换算法,计算Cache的块命中率。
(6) 采用LFU替换算法,计算Cache的块命中率。
(7) 如果改为全相联映象方式,再做(5)和(6),可以得出什么结论?
(8) 如果在程序执行过程中,每从主存装入一块到Cache,则平均要对这个块访问16次。请计算在这种情况下的Cache命中率。
[解答]
主存共有2个区,每个区2组,每个组2块,每块16个字节,如果按字节寻址,那么主存需要7位,如下图所示:
Cache地址需要6位,如下图所示:
对应关系参见教材图3.44
其中,(B0,B1),(B4,B5)对应(C0,C1),而(B2,B3),(B6,B7)对应(C2,C3)。
对应于主存块地址流:
B6,B2,B4,B1,B4,B6,B3,B0,B4,B5,B7,B3
一种可能的Cache的块地址流如下:
C2,C3,C0,C1,C0,C2,C3,C1,C0,C1,C2,C3
采用FIFO算法的调度图如下:
FIFO算法
B4
B4
B4
B4
B4
B0
B0
B5
B5
B5
命中3次
B1
B1
B1
B1
B1
B4
B4
B4
B4
B6
B6
B6
B6
B6
B6
B3
B3
B3
B3
B3
B3
B2
B2
B2
B2
B2
B2
B2
B2
B2
B7
B7
调入
调入
调入
调入
命中
命中
调入
调入
调入
调入
调入
命中
块命中率为:
采用LFU算法的调度图如下:
LFU算法
B4
B4
B4
B4
B4
B4
B4
B4
B4
B4
命中4次
B1
B1
B1
B1
B0
B0
B5
B5
B5
B6
B6
B6
B6
B6
B6
B6
B6
B6
B6
B7
B7
B2
B2
B2
B2
B2
B3
B3
B3
B3
B3
B3
调入
调入
调入
调入
命中
命中
调入
调入
命中
调入
调入
命中
块命中率为:
改用全相联以后,
当采用FIFO算法时:
FIFO算法
B6
B6
B6
B6
B6
B6
B3
B3
B3
B3
B3
B3
命中4次
B2
B2
B2
B2
B2
B2
B0
B0
B0
B0
B0
B4
B4
B4
B4
B4
B4
B4
B5
B5
B5
B1
B1
B1
B1
B1
B1
B1
B7
B7
调入
调入
调入
调入
命中
命中
调入
调入
命中
调入
调入
命中
块命中率为:
当采用LFU算法时:
LFU算法
B6
B6
B6
B6
B6
B6
B6
B6
B6
B5
B5
B5
命中3次
B2
B2
B2
B2
B2
B3
B3
B3
B3
B7
B7
B4
B4
B4
B4
B4
B4
B4
B4
B4
B4
B1
B1
B1
B1
B0
B0
B0
B0
B3
调入
调入
调入
调入
命中
命中
调入
调入
命中
调入
调入
调入
块命中率为:
可以看出,对不同的算法,全相联并不总是能够提高命中率。
我们考虑的是对Cache中存储单元的命中率,假设平均访问次数16次中包含第一次的访问,同3.15题(3)的分析,我们可以得到命中率为:
第四章习题解答
[习题4.7] 一个字节多路通道连接有5台设备,它们的数据传输率如表4.7所示。
表4.7 设备的数据传输率
设备名称
D1
D2
D3
D4
D5
数据传输速率(KB/s)
100
33.3
33.3
20
10
服务优先级
1(最高)
2
3
4
5
计算这个字节多路通道的实际工作流量。
为了使通道能够正常工作,请设计通道的最大流量和工作周期。
当这个字节多路通道工作在最大流量时,5台设备都在0时刻同时向通道发出第一次传送数据的请求,并在以后的时间里按照各自的数据传输速率连续工作。画出通道分时为各台设备服务的时间关系图,并计算这个字节多路通道处理完各台设备的第一次数据服务请求的时刻。
[解答]
我们道把数据传输速率理解为设备的数据产生速率,即设备对应的子通道数据传输速率,那么,通道的实际流量等于各子通道的流量之和:196.6KB/s。
我们取流量上限为200KB/s,则工作周期为5ms。
通道分时工作的时间关系图如下所示。通道处理完各设备第一次数据服务请求的时刻分别为:5ms、10ms、20ms、30ms、90ms。
0 10 20 30 40 50 60 70 80 90 100
D1
D2
D3
D4
D5
图4.7 5台设备向通道请求传送数据和通道为它们服务的时间关系
第五章习题解答
[习题5.3]假设一条指令的执行过程分为“取指令”、“分析”和“执行”三段,每一段的执行时间分别为Δt、2Δt和3Δt。在下列各种情况下,分别写出连续执行n条指令所需要的时间表达式。
顺序执行方式。
仅“取指令”和“执行”重叠。
先行控制方式。
[解答]
顺序执行需要的时间如下:
取指令和执行重叠,即一次重叠执行方式,我们假设第n+1条指令的取指令和第n条指令的执行同时结束,那么所需要的时间为:
采用先行控制以后:
[习题5.7] 一条线性流水线有4个功能段组成,每个功能段的延迟时间都相等,都为Δt。开始5个Δt,每间隔一个Δt向流水线输入一个任务,然后停顿2个Δt,如此重复。求流水线的实际吞吐率、加速比和效率。
[解答]
流水线的时空图如下:
我们可以看出,在(11n+1)Δt的时间内,可以输出5n个结果,如果指令的序列足够长(n→∞),并且指令间不存在相关,那么,吞吐率可以认为满足:
加速比为:
从上面的时空图很容易看出,效率为:
[习题5.8]用一条5个功能段的浮点加法器流水线计算。每个功能段的延迟时间均相等,流水线的输出端和输入端之间有直接数据通路,而且设置有足够的缓冲寄存器。要求用尽可能短的时间完成计算,画出流水线时空图,并计算流水线的实际吞吐率、加速比和效率。
[解答]
首先需要考虑的是,10个数的的和最少需要做几次加法。我们可以发现,加法的次数是不能减少的:9次;于是我们要尽可能快的完成任务,就只有考虑如何让流水线尽可能充满,这需要消除前后指令之间的相关。由于加法满足交换率和结合率,我们可以调整运算次序如以下的指令序列,我们把中间结果寄存器称为R,源操作数寄存器称为A,最后结果寄存器称为F,并假设源操作数已经在寄存器中,则指令如下:
I1: R1←A1+A2
I2: R2←A3+A4
I3: R3←A5+A6
I4: R4←A7+A8
I5: R5←A9+A10
I6: R6←R1+R2
I7: R7←R3+R4
I8: R8←R5+R6
I9: F←R7+R8
这并不是唯一可能的计算方法。假设功能段的延迟为Δt。时空图如下,图中的数字是指令号:
整个计算过程需要21Δt,所以吞吐率为:
加速比为:
效率为:
[习题5.9] 一条线性静态多功能流水线由6个功能段组成,加法操作使用其中的1、2、3、6功能段,乘法操作使用其中的1、4、5、6功能段,每个功能段的延迟时间均相等。流水线的输入端与输出端之间有直接数据通路,而且设置有足够的缓冲寄存器。现在用这条流水线计算:,画出流水线时空图,并计算流水线的实际吞吐率、加速比和效率。
[解答]
为了取得较高的速度,我们需要一次将乘法作完,设源操作数存放在寄存器A、B中,中间结果存放在寄存器R中,最后结果存放在寄存器F中,则执行的指令序列如下所示:
I1: R1←A1*B1
I2: R2←A2*B2
I3: R3←A3*B3
I4: R4←A4*B4
I5: R5←A5*B5
I6: R6←A6*B6
I7: R7←R1+R2
I8: R8←R3+R4
I9: R9←R5+R6
I10: R10←R7+R8
I11: F←R9+R10
这并不是唯一可能的计算方法。假设功能段的延迟为Δt。时空图(不完全)如下,图中的数字是指令号:
整个计算过程需要22Δt,所以吞吐率为:
加速比为:
效率为:
[习题5.18] 在下列不同结构的处理机上运行8×8的矩阵乘法C=A×B,计算所需要的最短时间。只计算乘法指令和加法指令的执行时间,不计算取操作数、数据传送和程序控制等指令的执行时间。加法部件和乘法部件的延迟时间都是3个时钟周期,另外,加法指令和乘法指令还要经过一个“取指令”和“指令译码”的时钟周期,每个时钟周期为20ns,C的初始值为“0”。各操作部件的输出端有直接数据通路连接到有关操作部件的输入端,在操作部件的输出端设置有足够容量的缓冲寄存器。
处理机内只有一个通用操作部件,采用顺序方式执行指令。
单流水线标量处理机,有一条两个功能的静态流水线,流水线每个功能段的延迟时间均为一个时钟周期,加法操作和乘法操作各经过3个功能段。
多操作部件处理机,处理机内有独立的乘法部件和加法部件,两个操作部件可以并行工作。只有一个指令流水线,操作部件不采用流水线结构。
单流水线标量处理机,处理机内有两条独立的操作流水线,流水线每个功能段的延迟时间均为一个时钟周期。
超标量处理机,每个时钟周期同时发射一条乘法指令和一条加法指令,处理机内有两条独立的操作流水线,流水线的每个功能段的延迟时间均为一个时钟周期。
超流水线处理机,把一个时钟周期分为两个流水级,加法部件和乘法部件的延迟时间都为6个流水级,每个时钟周期能够分时发射两条指令,即每个流水级能够发射一条指令。
超标量超流水线处理机,把一个时钟周期分为两个流水级,加法部件和乘法部件延迟时间都为6个流水级,每个流水级能够同时发射一条乘法指令和一条加法指令。
[解答] 要完成上面的矩阵乘法,我们可以计算需要完成的各种操作的数量(假定A和B都是8×8的矩阵。C语言代码如下:
int k;
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
{
sum=0;
for(k=0;k<8;k++)
{
sum+=A[i][k]×B[k][j]
}
C[i][j]=sum;}
需要完成的乘法数目为8×8×8=512次;
需要完成的加法数目为8×8×7=448次;
下面我们分析处理机的结构会给性能带来什么样的影响。
顺序执行时,每个乘法和加法指令都需要5个时钟周期(取指令、指令分析、指令执行);所以所需要的时间为:
单流水线标量处理机,采用两功能静态流水线时;因为有足够的缓冲寄存器,所以我们可以首先把所有的乘法计算完,并通过调度使加法流水线不出现停顿,所以所需要的时间为:
多操作部件处理机,只有一条指令流水线。
由于只有一条指令流水线,所以只能一个时钟周期发射一条指令,我们可以考察加法部件的执行过程,对C矩阵的第一个元素,当乘法部件完成两次计算后,加法部件启动运行7次,然后对其余的元素,加法部件停顿3个时钟周期,然后运行7次。故执行时间为:
单流水线标量处理机,有两条独立的操作流水线;
由于只有一条指令流水线,所以只能一个时钟周期发射一条指令,由于存在足够的缓冲寄存器,我们可以通过合适的调度消除数据相关。故执行时间为:
超标量机,能同时发射一条加法和一条乘法指令,有两条独立的操作流水线。
他的执行过程和(3)很相象,乘法流水线一直在运行,而加法流水线因为数据相关而存在停顿。我们可以换个角度,来考察乘法流水线的运行情况。从第3个时钟周期,乘法流水线一直忙碌,在乘法流水线完成所有计算后,加法流水线还需要完成最后一次计算。所以执行时间为:
超流水线处理机,每个时钟周期发射两条指令,加法部件和乘法部件都为6个流水级。
事实上相当于将时钟周期变成了10ns,而加法和乘法流水线变成了6级。这样和(4)类似有执行时间为:
超标量超流水线处理机,一个时钟周期分为两个流水级,加法部件和乘法部件都为6个流水级,每个流水级能同时发射一条加法和一条乘法指令。综合(5)和(6)的分析,我们可以知道,执行时间为:
展开阅读全文