【问题标题】:Difference between cache way and cache set缓存方式和缓存集的区别
【发布时间】:2014-03-03 21:06:44
【问题描述】:

我正在尝试学习一些关于缓存的东西。假设我有一个 4 路 32KB 缓存和 1GB RAM。每个高速缓存行是 32 字节。因此,我知道 RAM 将被分成 256 个 4096KB 页面,每个页面映射到一个缓存集,其中包含 4 个缓存行。

我有多少种缓存方式?我什至不确定缓存方式是什么。有人可以解释一下吗?我做了一些搜索,最好的例子是

http://download.intel.com/design/intarch/papers/cache6.pdf

但我还是一头雾水。

谢谢。

【问题讨论】:

    标签: caching cpu-cache


    【解决方案1】:

    您所指的缓存称为集合关联缓存。整个缓存分为多个集合,每个集合包含 4 个缓存行(因此是 4 路缓存)。所以关系是这样的:

    缓存大小 = 缓存中的集合数 * 每个集合中的缓存行数 * 缓存行大小

    您的缓存大小是 32KB,它是 4 路,缓存行大小是 32B。所以集合的数量是 (32KB / (4 * 32B)) = 256

    如果我们认为主内存是由缓存线组成的,那么每个缓存线大小的内存区域称为一个块。所以每个主存块都会被映射到一个缓存行(但并不总是映射到一个特定的缓存行,因为它被设置为关联缓存)。

    在集合关联缓存中,每个内存块都会映射到缓存中的一个固定集合。但它可以存储在集合的任何缓存行中。在您的示例中,每个内存块都可以存储在一组的 4 个缓存行中的任何一个中。

    内存块到缓存行的映射

    主存中的块数 = (1GB / 32B) = 2^25

    每页的块数 = (4KB / 32B) = 128

    系统中的每个字节地址可分为3部分:

    1. 最右边的位表示缓存行或块中的字节偏移量
    2. 中间位表示此字节(或缓存行)将映射到哪个缓存集
    3. 最左边的位代表标签值

    表示 1GB 内存所需的位数 = 30 (1GB = (2^30)B)

    表示缓存行偏移所需的位 = 5 (32B = (2^5)B)

    表示 256 个缓存集所需的位 = 8 (2^8 = 256)

    这样我们就剩下 (30 - 5 - 8) = 17 位用于标记。由于不同的内存块可以映射到同一个缓存行,这个标签值有助于区分它们。

    处理器生成地址时,30位地址的中间8位用于选择缓存集。该集合中将有 4 个缓存行。因此,所有四个常驻缓存行的标签都会与生成地址的标签进行匹配。

    示例

    如果一个 30 位的地址是 00000000000000000-00000100-00010(为清楚起见,用“-”分隔),那么

    1. 缓存内的偏移量为 2
    2. 集数为4
    3. 标签为0

    【讨论】:

    • 谢谢。你能进一步解释这意味着什么吗? “每页中的块数=(4KB / 32B)= 128”我理解每个内存地址只能分配给一组中的四个缓存线,对吗?每组负责4096KB的内存??
    【解决方案2】:

    如果我们将内存划分为高速缓存行大小的块(即 32B 内存块),则每个块都称为一个块。现在,当您尝试访问某个内存地址时,包含该地址的整个内存块(大小为 32B)将被放置到缓存行中。

    没有每一组不负责 4096KB 或一个特定的内存页。来自不同内存页面的多个内存块可以映射到同一个缓存集。

    【讨论】:

      【解决方案3】:

      在他们的“计算机组织和设计,硬件-软件接口”中,Patterson 和 Hennessy 谈到了缓存。比如this版本,第408页显示如下图(我添加了蓝、红、绿线):

      显然,作者在描述集合关联缓存时仅使用术语“块”(而不是“行”)。在直接映射缓存中,地址的“索引”部分寻址行。在集合关联中,它为集合编制索引。

      这个可视化应该与@Soumen 在接受的答案中的解释相得益彰。

      然而,这本书主要描述了精简指令集架构(RISC)。我个人知道 MIPS 和 RISC-V 版本。因此,如果您面前有一台 x86,请对这张照片持保留态度,与其说是实际实现,不如说是概念可视化。

      【讨论】:

        猜你喜欢
        • 2011-03-12
        • 1970-01-01
        • 2014-09-24
        • 2019-12-01
        • 2017-07-15
        • 2011-04-11
        • 2015-12-16
        • 1970-01-01
        • 2015-01-17
        相关资源
        最近更新 更多