CSAPP 第三版 第六章 家庭作业and so on

CSAPP 第三版 第六章 家庭作业
自己做的 仅供参考 可能出现错误

注:6.45 6.46 mark一下

6.22

假设磁道沿半径均匀分布,即总磁道数和(1-x)r成正比,则设磁道数为k(1-x)r;故2πkx(1-x)r2,从而x = 0.5时最大

6.23

Tavg seek = 4 ms
Tavg rotation = (1 / 2) * (1 / 15000 RPM) × (60s / 1min) = 2 ms
Tavg transfer = (1 / 15000 RPM) × (1 / 800) × (60s / 1/min) = 0.005 ms
T = Tavg seek + T avg rotation + T avg transfer = 6.005 ms

6.24

A. 22
B. 24000

6.25

高速缓存mCBEStsb
1.32102444642462
2.321024425613002
3.321024811282273
4.321024812812903
5.321024321322255
6.32102432482435

6.26

高速缓存mCBEStsb
1.322048812562183
2.322048441282372
3.32102428642561
4.321024322162345

6.27

A. 0x0704  0x0705  0x0706  0x0707
   0x08A4  0x08A5  0x08A6  0x08A7
B. 0x1238  0x1239  0x123A  0x123B

6.28

A. 无
B. 0x18F0  0x18F1  0x18F2  0x18F3
   0xB0  0xB1  0xB2  0xB3
C. 0x0E34  0x0E35  0x0E36  0x0E37
D. 0x1BDC  0x1BDD  0x1BDE  0x1BDF

6.29

A.

1211109876543210
CTCTCTCTCTCTCTCTCICICOCO

B.

操作地址命中?读出的值(或者未知)
0x834不命中未知
0x836命中未知
0xFFD命中0xC0

6.30

A. 128

B.

1211109876543210
CTCTCTCTCTCTCTCTCICICICOCO

6.31

A.

1211109876543210
0011100011010

B.

参数
高速缓存块偏移(CO)0x02
高速缓存组索引(CI)0x06
高速缓存标记(CT)0x38
高速缓存命中?(是/否)
返回的高速缓存字节0x-

6.32

A.

1211109876543210
1011011101000

B.

参数
高速缓存块偏移(CO)0x0
高速缓存组索引(CI)0x2
高速缓存标记(CT)0xB7
高速缓存命中?(是/否)
返回的高速缓存字节0x-

6.33

0x16C8  0x16C9  0x16CA  0x16CB
0x1788  0x1789  0x178A  0x178B

6.34

dst数组

列0列1列2列3
行0mmmm
行1mmmm
行2mmmm
行3mmmm

src数组

列0列1列2列3
行0mmhm
行1mhmh
行2mmhm
行3mhmh

6.35

dst数组

列0列1列2列3
行0mhhh
行1mhhh
行2mhhh
行3mhhh

src数组

列0列1列2列3
行0mhhh
行1mhhh
行2mhhh
行3mhhh

6.36

A. 100%
B. 25%
C. 25%
D. 不会,冷不命中无法避免
E. 会,可以避免一些冲突不命中

6.37

函数N = 64N = 60
sumA0.250.25
sumB10.25
sumC0.50.25

6.38

A. 1024
B. 128
C. 12.5%

6.39

A. 1024
B. 256
C. 25%

6.40

A. 1024
B. 256
C. 25%

6.41

25%

6.42

25%

6.43

100%

6.44

http://csapp.cs.cmu.edu/3e/students.html

在这里插入图片描述

为了辨识缓存的大小,选取中间的列(例如S8)来判断——避免CPU的prefetching带来干扰。可以看出,在32K和512K以及8M的地方有明显的落差,所以判断L1:32k、L2:256k、L3:8M。

在这里插入图片描述
6.45

3B2 < C

#define B chunkdatas_length_of_side
void faster_transpose(int *dst, int *src, int dim)
{
    long limit = dim * dim;
    for (int i = 0; i < dim; i += B)
    {
        for (int j = 0; j < dim; j += B)
        {
            /* Using blocking to improve temporal locality */

            for (int k = i; k < i+B; ++k)
            {
                for (int l = j; l < j+B; ++l)
                {
                    /* independent calculations */
                    int d = l*dim + k;
                    int s = k*dim + l;
                    if (s < limit && d < limit)
                    {
                        dst[d] = src[s]
                    }
                }
            }
        }
    }
}

乘法和加法已经实现了循环之间独立,src也是按照行读入的,但是dst却是按照列读入的,这样没有充分利用每一次读入的block。故可以采用blocking,即书上对矩阵乘法采用的方法。

6.46

#define B chunkdatas_length_of_side
void faster_col_convert(int *G, int dim)
{
    long limit = dim * dim;
    for (int i = 0; i < dim; i += B)
    {
        for (int j = i; j < dim; j += B)
        {
            /* Using blocking to improve temporal locality */
            for (int k = i; k < i+B; ++k)
            {
                for (int l = j; l < j+B; ++l)
                {
                    /* independent calculations */
                    int d = l*dim + k;
                    int s = k*dim + l;
                    if (s < limit && d < limit)
                    {
                      	Bool temp = G[d] || G[s];
                        G[d] = temp;
                        G[s] = temp;
                    }
                }
            }
        }
    }
}
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值