• 家庭作业6.28+6.37+6.38——20135202、20135220


    第六章家庭作业

    分值分配

    6.28:20135202(1.5) 20135220(0.5)

    6.37:20135202(1) 20135220(3)

    6.38:20135202(3) 20135220(1)

    6.28 分值1分

    (1)所有会在组6中命中的十六进制存储器地址:

    由习题6.13的表可知,如要命中组六,需要标记位为91,组为6,也就是说八个CT位的值分别为1001 0001,三个CI的值为110,剩下两位是任意的,取值范围为00,01,10,11,所以所有的情况只有四种:

    1 0010 0011 1000 = 0x1238

    1 0010 0011 1001 = 0x1239

    1 0010 0011 1010 = 0x123A

    1 0010 0011 1011 = 0x123B

    (2)命中组1的:同上题相同,八个CT值分别为0100 0101,三个CI值分别为001,有四种情况:

    0 1000 1010 0100 = 0x08A4

    0 1000 1010 0101 = 0x08A5

    0 1000 1010 0110 = 0x08A6

    0 1000 1010 0111 = 0x08A7

    6.37 分值2分

    题目

    C程序:

    int x[2][256];
    int i;
    int sum=0;
    
    for (i=0;i<256;i++){
    	sum += x[0][i] * x[1][i];
    }
    
    • sizeof(int) == 4

    • 数组X从存储器地址0x0开始,按照行优先顺序存储。

    • 每种情况中,高速缓存最开始时都是空的。

    • 唯一的存储器访问是对数组x的条目进行访问,其他所有变量都存储在寄存器中。

    A、假设高速缓存是1024字节,直接映射,高速缓存块大小为32字节,不命中率是多少?

    直接映射是每组只有一个高速缓存行,块大小为32字节,表示可以存储8个int数值。
    数组是按照行优先存储的,计算数组一行的大小为256*4=1024,所以高速缓存只够存数组的一行。
    所以x[0]和x[1]的每一个元素(x[0][i]和x[1][i])对应的高速缓存是同一个块。
    因此,每次请求都在加载,驱逐,替换。不命中率为100%。
    

    B、高速缓存改为2048字节,不命中率是多少?

    缓存足够大,可以存储整个数组
    因此只有冷不命中,而块大小为32字节,表示可以存储8个int数值
    所以每次都会加载x[0][i]~x[0][i+7]共8个数值到缓存组中,这里就只有x[0][i]是不命中的
    所以不命中率为1/8 = 12.5%
    

    C、高速缓存是1024字节,两路组相联,使用LRU替换策略,高速缓存块大小为32字节,不命中率是多少?

    两路组相联表示每组有两个高速缓存行,而每行可以存储8个数值
    高速缓存只有1024字节,不够存储数组
    发生不命中的时候,一个是冷不命中,另一个是缓存中没有,需要加载进去
    这时使用的是LRU替换策略,替换最近最少用的,替换的那一行的8个数值已经都用过了,再也不会用到了
    所以最后还是相当于只有冷不命中,相当于每8个数据中只有一个是不命中的
    所以不命中率为1/8 = 12.5%
    

    D、C中,更大的高速缓存大小会帮助降低不命中率吗?

    不会,因为块大小不变时,冷不命中的概率不可能被减小。
    

    E、C中,更大的块大小会帮助降低不命中率吗?

    会降低,因为一个块的大小增加,冷不命中的频率就降低。
    

    6.38 分值2分

    解:

    由题意可知,C=4KB=4096 Bytes,而C = S x E x B,在直接映射高速缓存中E = 1,块大小B=16 Bytes,可得S = 256,一共有256个高速缓存组。

    (1)N = 64时:

    数组大小为2x64x4=512字节,缓存容量足够大,不用考虑容量不命中。
    因为每块是16字节,数组中每个单元为4字节,所以四个一组,一共需要16组,每一组中的行都是满的

    sumA步长为1,遵循了行优先顺序,这个里面只有冷不命中,就是四个中有一个不命中,不命中率为0.25

    sumB是列优先,步长为N,每一次都会与上一次的映射到同一个块,导致每次都会冲突,所以不命中率为1

    sumC中除了四个中有一个冷不命中外,还因为列扫描到i+1时的冲突不命中(每次都会映射到同一组同一块),所以不命中率为0.5

    (2)N = 60时:

    数组大小为2x60x4=480字节,缓存容量足够大,不用考虑容量不命中。
    因为每块是16字节,数组中每个单元为4字节,所以四个一组,一共需要16组,但行中不是满的

    sumA同上,只有冷不命中,不命中率为0.25

    sumB消除了冲突不命中,不会每次都映射到同一组同一块,所以只有冷不命中,不命中率为0.25

    sumC理由同上,只有冷不命中,不命中率为0.25

  • 相关阅读:
    分布式事务的四种解决方案
    uber-go/guide 的中文翻译
    域名解析-CNAME
    Nginx节点存活状态检查
    Laravel核心解读--中间件(Middleware)
    Mac dyld: Library not loaded: /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib
    前缀树算法实现路由匹配原理解析
    原创-实用salt部署文档(持续更新)
    线上案例-调参-设置滑动窗口提高视频云播放性能
    NGINX日志割切
  • 原文地址:https://www.cnblogs.com/20135202yjx/p/4954860.html
Copyright © 2020-2023  润新知