cache blocking

本文详细解释了cacheblocking的概念,讨论了miss率在缓存加载过程中的计算方法,以缓存块为单位的更新策略,以及局部性原理对缓存效率的影响。特别关注了计算机架构对缓存行为的影响,如缓存行大小和写回策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cache blocking

miss rate 概念

在这里插入图片描述

在这里插入图片描述

miss 次数例子

在这里插入图片描述
在这里插入图片描述

每个缓存块能够一次性加载一整行的8个元素,而每行有n个元素,那么在初始加载时,每行都会有 n/8次不命中。这是因为每次加载一个缓存块,都可以覆盖一整行的8个元素,而每行有n个元素,所以需要 n/8 次加载来处理整行。
如果每次加载一个缓存块,都能够容纳整行的8个元素,那么每行在处理过程中会有 n/8 次不命中。

对于每列会有n次不命中。3个for, 所以是 (n/8 + n) * n^2。

miss 次数使用分块技术的例子

在这里插入图片描述
在这里插入图片描述
缓存块的大小是8个双精度数,而缓存的总大小 C 远远小于数据集的大小 n。假设每个块的大小为 B^ 2 。由于三个块可以容纳在缓存中(即 3B^2 < C ,第一轮迭代时的不命中次数。
在每个块的第一次加载时,由于缓存块大小是8个双精度数,每次加载一个缓存块,实际上只加载了 8 个元素,即 (B^ 2)/8 个双精度数。因此,每个块的第一次加载会导致 (B^2)/8 次不命中,因为整个块的数据并未完全装入缓存。
缓存里的cache block 数量是 (B^2)/8。
在这里插入图片描述
由于每个块有(B^2)/8次不命中次数, 对于步长为B的情况,实际的miss次数是 (B ^2)/8 * (n/B), 因为是2个矩阵,所以需要再乘2。

miss 总数是 (nB )/4 * (n/B) ^2 。

miss 次数总结

在这里插入图片描述

缓存更新

缓存的更新通常是以缓存块为单位进行的,而不是以单个元素为单位。当程序访问内存时,它将一个块的数据加载到缓存中,这称为缓存行(cache line)。缓存行是缓存的基本单位,通常包含多个字节或数据项。

当某个数据被请求并加载到缓存时,可能会带入其周围的数据,即将整个缓存行加载到缓存中。这是因为在程序中,通常存在着局部性原理,即相邻的数据项很可能也会被近期使用。

如果在缓存中的某个块的数据被修改,通常整个缓存块会被标记为“脏”(dirty)。当这个缓存块被替换出缓存时,它的内容会被写回到主内存。因此,缓存的更新是以缓存块为单位的,而不是单个元素。

需要注意的是,具体的缓存行大小和更新策略可能因计算机架构而异。不同的处理器和架构可能有不同的缓存行大小和写回策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值