这英特尔i486具有 8 KB 的 L1 缓存。英特尔 Nehalem每个核心有 32 KB L1 指令缓存和 32 KB L1 数据缓存。
L1 缓存的数量几乎没有以时钟频率增加的速度增加。
为什么不?
答案1
30K 的维基百科文本不足以解释为什么缓存太大不是最佳选择。当缓存太大时,在缓存中查找项目的延迟(考虑到缓存未命中)开始接近在主内存中查找项目的延迟。我不知道 CPU 设计师的目标比例是多少,但我认为这类似于 80-20 准则:您希望 80% 的时间在缓存中找到最常见的数据,而其他 20% 的时间您必须转到主内存来查找它。(或 CPU 设计师想要的比例可能是多少。)
编辑:我确信它远不及 80%/20%,所以用 X 和 1-X 代替。:)
答案2
一个因素是 L1 提取在 TLB 转换完成之前开始,以减少延迟。如果缓存足够小,路径足够高,则虚拟地址和物理地址之间的缓存索引位将相同。这可能会降低使用虚拟索引、物理标记缓存维护内存一致性的成本。
答案3
缓存大小受多种因素影响:
电信号的速度(如果不是光速,也应该是同一数量级的):
- 一微秒内300米。
- 一纳秒内移动30厘米。
经济成本(不同缓存级别的电路可能不同,某些缓存大小可能不值得)
- 将缓存大小加倍并不会使性能加倍(即使物理允许该大小起作用),对于小尺寸,将缓存大小加倍所带来的不仅仅是性能加倍,对于大尺寸,将缓存大小加倍几乎没有带来任何额外的性能。
- 在维基百科上,你可以找到一个图表,例如,显示缓存大于 1MB 是多么不值得(实际上存在更大的缓存,但你必须记住它们是多处理器核心。)
- 对于 L1 缓存,应该有一些其他图表(供应商未显示),方便将 64 Kb 作为大小。
如果 L1 缓存大小在 64kb 之后没有改变,那是因为它不再有价值。还要注意,现在缓存的“文化”越来越浓厚,许多程序员编写“缓存友好型”代码和/或使用预取技术指令来减少延迟。
我曾经尝试创建一个简单的程序,用于访问一个数组(几兆字节)中的随机位置:该程序几乎冻结了计算机,因为每次随机读取时,整个页面都会从 RAM 移动到缓存,而且由于这种情况经常发生,这个简单的程序耗尽了所有带宽,只留下很少的资源用于操作系统。
答案4
从L1缓存:
一级缓存或主缓存位于 CPU 上,用于临时存储以 32 字节块组织的指令和数据。主缓存是最快的存储形式。因为它内置于芯片中,具有零等待状态(延迟) 与处理器执行单元的接口,其大小有限。
SRAM 每比特使用两个晶体管,只要电路有电,就可以保存数据,无需外部帮助。这与动态 RAM (DRAM) 形成对比,后者必须每秒刷新多次才能保存其数据内容。
英特尔于 1997 年初推出的 P55 MMX 处理器因其一级缓存大小增加至 32KB 而引人注目。同年晚些时候推出的 AMD K6 和 Cyrix M2 芯片进一步提高了标准,提供了 64KB 的一级缓存。64KB 仍然是标准的一级缓存大小,尽管各种多核处理器可能会以不同的方式使用它。
编辑:请注意,这个答案是 2009 年的,而 CPU 在过去 10 年中已经发生了巨大的变化。如果您已经看到这篇文章,请不要太认真对待我们这里的所有答案。