内存存储结构 csapp

内存存储结构

一、存储器分类

1、RAM随机存取存储器

RAM 掉电丢失

SRAM:快速 贵 cache

DRAM:相对慢 便宜 主存 帧缓冲区

2、ROM只读存储器

image-20220420201345967

读:

CPU将地址A放在内存总线上。
主内存从内存总线中读取A,得到内容x,并将其放在总线上。
CPU从总线中读取单词x,并将其复制到寄存器%rax中。

写:

CPU将地址A放在总线上。主存储器读取它,并等待相应的数据字到达
CPU将数据字y放在总线上。
主存储器从总线中读取数据字y,并将其存储在地址A处

二、Disk Drive

1.组成

面 > 磁道> 扇区> 间隙

image-20220420202218029

2.磁盘容量

记录密度    位/英寸
磁道密度    道/英寸
面密度      位/英寸^2   

image-20220420203233776

3.磁盘操作时间
访 问 时 间 = 寻 道 时 间 + 旋 转 时 间 + 传 送 时 间 访问时间=寻道时间+旋转时间+传送时间 访=++

三、局部性原则

空间局部性

image-20220420203556114

时间局部性

image-20220420203546955

四、高速缓存

将使用频率高的,以块的形式存储到cache中

image-20220420204014609

命中(HIT)

不命中(MISS)

冷不命中:第k层是空的

**冲突不命中:**不空,但不是对应的

**容量不命中:**超缓存

五、cache结构与寻址

高速缓存组 set     S
高速缓存行 line    E
数据块    block   B
cache size = S * E * B

中间位组索引

image-20220420215225889

S=2^s组数
E每个组的行数
B=2^b每个块多少字节
m=Log2(M)物理地址位数
C=B * S * E不包括有效位和标记位

1、直接映射高速缓存 E=1

每组只有1行

image-20220420220724704

image-20220420221529122

2. E路组相联高速缓存

image-20220420223436838

image-20220420223515338

不命中时的行替换:

LFU :最不长使用的,

LRU:最近最少使用

3.全相联高速缓存

只有一个组 地址中没有组索引

4.写

写命中: 直写:立即写回下一层(缺点是引起总线流量)

​ 写回:当要被替换时再写回

写不命中:写分配:把下一层的块存到这一层

​ 非写分配:直接把字写到低一层中

六、矩阵乘法

1.交换顺序

/* ijk */
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
sum = 0.0;
for (k=0; k<n; k++) 
sum += a[i][k] * b[k][j];
c[i][j] = sum;
}
}
//不命中率
A:每四次有一次不命中
B:每次都不命中
C:很少当为0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-txJQ54Vk-1650973980258)(C:/Users/86150/AppData/Roaming/Typora/typora-user-images/image-20220421170536180.png)]

/* kij */
for (k=0; k<n; k++) {
for (i=0; i<n; i++) {
r = a[i][k];
for (j=0; j<n; j++)
c[i][j] += r * b[k][j];
} }
并没有一次将c中的值算出来
    //不命中率
A:0
B:每四次有一次不命中
C:每四次有一次不命中

image-20220421171331400

/* jki */
for (j=0; j<n; j++) {
for (k=0; k<n; k++) {
r = b[k][j];
for (i=0; i<n; i++)
c[i][j] += a[i][k] * r; } }
//
A:1
B:0
C:1

image-20220421171452287

2.分块

c = (double *) calloc(sizeof(double), n*n);
/* Multiply n x n matrices a and b */
void mmm(double *a, double *b, double *c, int n) {
int i, j, k;
for (i = 0; i < n; i+=B)
for (j = 0; j < n; j+=B)
for (k = 0; k < n; k+=B)
    
/* B x B mini matrix multiplications */
for (i1 = i; i1 < i+B; i++)
for (j1 = j; j1 < j+B; j++)
for (k1 = k; k1 < k+B; k++)
c[i1*n+j1] += a[i1*n + k1]*b[k1*n + j1];
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Cd03tvX-1650973980261)(C:/Users/86150/AppData/Roaming/Typora/typora-user-images/image-20220421171818534.png)]

不命中率:

每个block : 1/8 * B * B

一次迭代:一行 一列 :2* n/b *1/8 * B * B=nB/4

总共: (n/B)^2nB/4
)
for (k1 = k; k1 < k+B; k++)
c[i1
n+j1] += a[i1*n + k1]b[k1n + j1];
}


[外链图片转存中...(img-1Cd03tvX-1650973980261)]

不命中率:

每个block : 1/8 * B * B

一次迭代:一行  一列  :2* n/b *1/8 * B * B=nB/4

总共: (n/B)^2*nB/4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值