上一篇链接:http://www.cnblogs.com/20145207lza/p/5999103.html#3542846
讲在前面:这周一定出去
练习题
习题6.2
计算这样一个磁盘的容量。它有2个盘片,10 000个柱面,每条磁道平均有400个扇区,每个扇区平均有512个字节。
磁盘容量 = (512/400)4001000022= 8 192 000 000 字节 = 8.192GB
习题6.3
估计访问下面的一个磁盘上的一个扇区需要的时间(以ms为单位)。旋转速率:15000RPM;Taveseek = 8ms;每条磁道的平均扇区数:500
访问时间 = Taveseek+Taverotation+Tavetransfer = 8ms +0.51/15000RPM60secs.min1000ms/s+1/15000RPM1/50060secs/min1000ms/s=8ms+2ms+0.008ms=10.008ms
习题6.4
假设1MB的文件由512字节的逻辑块组成,存储在有如下特性的磁盘驱动器上(旋转速率:10 000RPM,Taveseek=5ms,平均扇区/磁道 = 1000)。 (1)最好的情况:给定逻辑块到磁盘扇区的最好的可能的映射(即,顺序的),估计读这个文件需要的最优时间 (2)随机的情况:如果块是随机地映射到磁盘扇区的,估计读这个文件需要的时间
(1)T=Taveseek+Taverotation+2Tmaxrotation=5ms+3ms+26ms=20ms
(2)在这种情况下,块被随机的映射到扇区上,读2000块的每一块都需要Taveseek+Tavgrotation=8ms
。所以读这个文件的总时间为T = 8ms*2000=16000ms=16s
习题6.8
改变原函数中循环的顺序,使得它以步长为1的引用模式扫描三位数组a。
int sumarray3d(int a[N] [N] [N])
{
int i,j,k,sum=0;
for(k=0;k<N;k++){
for(i=0;i<N;i++){
for(j=0;j<N;j++){
sum += a[k] [i] [j];
}
}
}
return sum;
}
习题6.9
判断图中三个函数的空间局部性。
函数clear1以步长为1的引用模式访问数组,因此明显的具有最好的空间局部性;函数clear2依次扫描N个结构中的每一个,这也可以,但是在每个结构中,它以步长不为1的模式跳到下列相对于结构起始位置的偏移处,所以clear2的空间局部性比clear1的差;函数clear3不仅在每个结构中跳来跳去,而且还从结构跳到结构,所以clear3的空间局部性最差。
习题6.11
在前面dotprod的例子中,在我们对数组x做了填充之后,所有对x和y的引用的命中率是多少?
在对dotprod例子中对数组x定义为float x[12]
后,填充消除了冲突不命中,也就是不会发生y[0] ~ y[3]
的块被拷贝到组0,覆盖前一次引用拷贝进来的X的值的情况,因此有四分之三
的引用是命中的。
习题6.13
有两个低位是块偏移(CO)
,然后是三位的组索引(CI)
,剩下的位作为标记(CT)
。
代码托管情况: