代码之家  ›  专栏  ›  技术社区  ›  Frank V

硬件缓存公式(参数)

  •  0
  • Frank V  · 技术社区  · 17 年前

    下面的图像是从 Computer Systems: A Programmer's Perspective . (我向出版商道歉)。这出现在第489页。

    Figure 6.26: Summary of cache parameters http://theopensourceu.com/wp-content/uploads/2009/07/Figure-6.26.jpg

    我有一个 可怕地 很难理解其中的一些计算。目前,困扰我的是M的计算,它应该是唯一地址的数目。”唯一内存地址的最大数目。”2 你的意思是?我想m是以对数计算的 (m)。这似乎是圆形的……

    为了这篇文章的目的,假设您想创建一个例子,假设如下:512组,每组8个块,每块32个字,每个字8位

    更新: 到目前为止,所有的答案都很有用,但我仍然认为我遗漏了一些东西。cwrea的回答为我的理解提供了最大的桥梁。我觉得答案就在我的心里。我知道它在那儿,但我认不出来。

    为什么M=2 但m=对数 (m)?

    也许我遗漏的细节是,对于32位机器,我们假设m=2 三十二 . 这一个事实能让我解出m吗?M=log (2) 三十二 )?但这让我回到32…我一定错过了什么…

    5 回复  |  直到 17 年前
        1
  •  2
  •   dborba    17 年前

    M&M是相互关联的,而不是相互定义的。然而,他们称m为派生量,因为通常处理器/控制器是其使用的字长的限制因素。

    在实际系统中,它们是预先定义的。如果您有一个8位处理器,它通常可以处理8位内存地址(m=8)。因为可以用8位表示256个值,所以总共可以有256个内存地址(m=2^8=256)。正如您所看到的,由于处理器的限制,我们从小M开始,但是您总是可以决定您想要一个大小为M的内存空间,并使用它来选择一个可以根据字大小=log2(m)处理它的处理器。

    现在,如果我们以你的假设为例,

    512套,每套8块,32字 每个块,每个字8位

    我必须假设这是一个8位处理器,给出了8位字。此时,您所描述的缓存大于地址空间(256个字),因此毫无意义。

    你可能想退房 Computer Architecture Animations & Java applets . 我不记得是否有任何一个缓存进入缓存结构(通常他们关注行为),但这是我过去为指导学生学习架构而保存的一个资源。

    如果你的问题仍然没有意义,你可以进一步完善你的问题。

        2
  •  1
  •   drudru    17 年前

    m的两个方程只是一个关系式。他们有两种表达相同观点的方式。不过,它们并不表示因果关系。我认为作者的假设是,唯一地址位的数量是由CPU设计者在开始VIA需求时定义的。然后M可以根据实现而变化。

        3
  •  1
  •   Jeff Walden    17 年前

    m是系统内存地址的位宽度,例如32表示x86,64表示x86-64。例如,x86上的块大小是4K,所以b=12。块大小或多或少是指您可以从持久存储中读取的最小数据块——您将其读取到内存中,处理该副本,然后稍后再将其写回。我相信标记位是用来查找本地缓存在CPU附近(甚至在RAM中)的数据的高T位。我不确定设定线部分,尽管我可以做出合理的猜测,这将不是特别可靠。

        4
  •  1
  •   Chris W. Rea    17 年前

    循环…是的,但我认为这只是说明两个变量m和m必须服从这个方程。 可能是给定或假定的数量。

    示例1:如果要使用主内存大小为 =4GB(4294967296字节),然后 会是32,因为 =2 ^ 32,即 = Log2 )也就是说,需要32位来寻址整个主存储器。

    示例2:假设主内存大小较小,例如 =16MB(16777216字节),然后 将是24,即log2(16777216)。

        5
  •  0
  •   Captain Segfault    17 年前

    似乎你对数学而不是建筑的东西感到困惑。

    2^m(“第二次幂”)是2*2…m 2's.2^1=2,2^2=2*2=4,2^3=2*2*2=8,依此类推。值得注意的是,如果您有一个M位二进制数,则只能表示2^m个不同的数字。(这很明显吗?如果不是,用10替换2可能会有帮助,并考虑十进制数字)

    log2(x)(“x的对数底2”)是2^x的反函数。也就是说,log2(2^x)=x代表所有x。( 这是一个定义! )

    您需要log2(m)位来表示m个不同的数字。

    请注意,如果从m=2^m开始,并取两边的log2,则得到log2(m)=m。该表非常明确。