【问题标题】:Why isn't there a data bus which is as wide as the cache line size?为什么没有与高速缓存行大小一样宽的数据总线?
【发布时间】:2017-01-04 01:21:54
【问题描述】:

当发生高速缓存未命中时,CPU 会从主内存中取出整个高速缓存行到高速缓存层次结构中。 (在 x86_64 上通常为 64 字节)

这是通过数据总线完成的,在现代 64 位系统上只有 8 字节宽。 (因为字长是 8 字节)

编辑:“数据总线”在此上下文中是指 CPU 芯片和 DRAM 模块之间的总线。此数据总线宽度不一定与字长相关。

根据策略,首先获取实际请求的地址,然后依次获取缓存行的其余部分。

如果有一个 64 字节宽度的总线,它看起来会快得多,这将允许一次获取整个缓存行。 (这将是字长的八倍)

也许有两种不同的数据总线宽度,一种用于标准高速缓存行提取,另一种用于仅适用于字长内存访问的外部硬件 (DMA)。

限制数据总线大小的限制是什么?

【问题讨论】:

  • 不再有“数据总线”这样的东西了。数据在现代 CPU 中通过许多总线传输,并且它们可以具有不同的宽度。
  • “数据总线”一词是指 CPU 和 RAM 之间的总线。我知道还有许多其他公共汽车,但我不知道任何其他术语来描述这种公共汽车。
  • 即使这个词也是模棱两可的。术语“CPU”可以表示物理 CPU 芯片或只是该芯片中执行 CPU 功能的部分。因此,您可以指 CPU 和 RAM 控制器之间的总线或 RAM 控制器和 RAM 之间的总线。此外,CPU 之间的总线有时也在 CPU 和 RAM 之间(当一个 CPU 访问连接到另一个 CPU 的 RAM 时)。真的没有一条数据总线了。
  • 对于 DDR4 DRAM,每个模块的数据总线为 64 位宽,CPU 一次可以与多个模块通信。
  • 真的应该在电子相关论坛上问这个问题。更窄和更宽的公共汽车之间的权衡是复杂的。您可能会认为更宽总是允许更大的带宽,但像歪斜和线之间的串扰这样的事情只对一个点是真实的,许多因素会影响那个点的位置。

标签: caching memory cpu-architecture cpu-cache micro-architecture


【解决方案1】:

我认为 DRAM 总线宽度在 AMD64 之前扩展到了当前的 64 位。巧合的是,它与字长相匹配。 (P5 Pentium 已经guaranteed atomicity of 64-bit aligned transfers,因为它可以通过其 64 位数据总线轻松做到这一点。当然,这只适用于 32 位微架构上的 x87(和更高版本的 MMX)加载/存储。)

见下文:High Bandwidth Memory 确实使用了更宽的总线,因为您可以对时钟进行多高的限制,并且在某些时候,使其大规模并行确实会变得有利。

如果有一个 64 字节宽度的总线,这似乎会快得多,这将允许一次获取整个缓存行。

突发传输大小不必与总线宽度相关。与 DRAM 之间的传输确实发生在高速缓存行大小的突发中。 CPU 不必为每个 64 位发送单独的命令,只需设置整个高速缓存行(读取或写入)的突发传输。如果它想要更少,它实际上必须发送an abort-burst command;没有“单字节”或“单字”传输命令。 (是的,SDRAM wiki 文章仍然适用于 DDR3/DDR4。)

您是否认为需要更宽的总线来减少命令开销?它们不是。(SDRAM 命令通过与数据不同的引脚发送,因此可以流水线化命令,在当前突发传输期间设置下一个突发。或者在打开新行时更早开始(DRAM页面)在另一个银行或芯片上。DDR4 wiki 页面有一个nice chart of commands,显示地址引脚对于某些命令如何具有其他含义。)


高速并行总线很难设计。主板上 CPU 插槽和每个 DRAM 插槽之间的所有走线必须在不到 1 个时钟周期内具有相同的传播延迟。这意味着它们的长度几乎相同,并控制其他走线的电感和电容,因为传输线效应在足够高的频率下至关重要。

极宽的总线会阻止您将其计时,因为您无法达到相同的容差。 SATA 和 PCIe 都用高速串行总线代替了并行总线(IDE 和 PCI)。 (PCIe 使用多个并行通道,但每个通道都是其自己的独立链路,只是并行总线的一部分。

从 CPU 插槽到每个通道的 DRAM 插槽使用 512 条数据线是完全不切实际的。典型的台式机/笔记本电脑 CPU 使用双通道内存控制器(因此两个 DIMM 可以同时做不同的事情),所以这将是主板上的 1024 迹线和 CPU 插槽上的针脚。 (这是在固定数量的控制线之上,如 RAS、CAS 等。)

非常高时钟速度运行外部总线确实会出现问题,因此需要在宽度和时钟速度之间进行权衡。


有关 DRAM 的更多信息,请参阅 Ulrich Drepper 的 What Every Programmer Should Know About Memory。它在 DRAM 模块、地址线和复用器/解复用器的硬件设计方面获得了惊人的技术性。

请注意,RDRAM (RAMBUS) 使用高速 16 位总线,并且具有比 PC-133 SDRAM 更高的带宽(1600MB/s 与 1066MB/s)。 (它的延迟更差,运行更热,并且由于一些技术和一些非技术原因在市场上失败了)。


我想这有助于使用更宽的总线,直到您可以在单个周期内从物理 DRAM 芯片读取的宽度,因此您不需要那么多缓冲(更低的延迟)。

Ulrich Drepper 的论文(以上链接)证实了这一点:

基于地址行a2 a3 一栏的内容 然后可用于 DRAM 的数据引脚 芯片。 这在一个数字上并行发生了很多次 DRAM 芯片产生相应的总位数 到数据总线的宽度


在 CPU 内部,总线要宽得多。 Core2 到 IvyBridge 在不同级别的缓存之间以及从执行单元到 L1 使用 128 位数据路径。 Haswell widened that to 256b (32B), with a 64B path between L1 and L2


High Bandwidth Memory 旨在与控制它的任何东西更紧密地耦合,并为每个通道使用 128 位总线,有 8 个通道。 (总带宽为 128GB/s)。 HBM2 的速度是原来的两倍,但宽度相同。

128b 的 8 个通道不是 1024b 总线,而是在拥有一个难以保持同步的极宽总线与将每个位放在单独的通道(如 PCIe)上的开销过多之间进行权衡。如果您需要强大的信号和连接器,单独通道上的每个位都很好,但是当您可以更好地控制事物时(例如,当内存没有插入时),您可以使用宽快速总线。


也许有两种不同的数据总线宽度,一种用于标准高速缓存行提取,另一种用于仅适用于字长内存访问的外部硬件 (DMA)。

情况已经如此。 DRAM 控制器集成到 CPU 中,因此来自 SATA 控制器和网卡等系统设备的通信必须通过一条总线 (PCIe) 从它们到 CPU,然后再到 RAM (DDR3/DDR4)。

从 CPU 内部存储器架构到系统其余部分的桥接称为系统代理(这基本上取代了过去在没有集成内存控制器的系统中主板上单独的北桥芯片)。芯片组南桥通过它提供的一些 PCIe 通道与其通信。

在多套接字系统上,缓存一致性流量和非本地内存访问也必须在套接字之间发生。 AMD 可能仍使用超传输(64 位总线)。英特尔硬件在连接至强内部内核的环形总线上有一个额外的站点,这个额外的连接是其他套接字的数据输入或输出的地方。 IDK 物理总线的宽度。

【讨论】:

  • 嗯,一块内存有 8 或 16 个 DRAM 芯片。我认为每个 DRAM 芯片可能只有 1 位,除非它在同一芯片上有多个阵列,它们都使用相同的行和列地址。 (它实际上是一个矩阵,从行和列线交叉的元素中读取数据。)每个 DRAM 芯片可能会并行读取 8 位,这完全可以与 64 位总线完美匹配。跨度>
  • @Mike76:嗯,这确实让您可以更快地计时并降低延迟。您通常不想在与 CPU 相同的硅片上构建 DRAM。显然,有些工艺调整对 CPU 有利,但对 DRAM 不利,反之亦然。在 Haswell / Broadwell / Skylake 的某些型号中,英特尔确实将 128MB 或 256MB 的 eDRAM 与其 CPU 放在同一个封装中。 (嵌入式 DRAM)。它提高了集成图形性能,以及一些基准测试。它也称为 CrystalWell,与 Iris Pro 图形搭配使用。
  • 请参阅arstechnica.com/information-technology/2015/08/…anandtech.com/show/9582/… 了解更多详情。我怀疑他们在内部使用了非常宽的总线。更受控制的环境可能只是意味着他们可以更快地运行时钟。它确实具有显着降低的延迟。
  • @Mike76:看我最后的编辑;我只记得HBM存在。我查了一下,它确实使用了多个非常宽的总线通道。
  • @Mike76:我检查了你应该知道的关于内存的一切论文,它确实说 DDR SDRAM 内存模块可以并行读取总线宽度的数据。它在内存方面真正具有技术性,但仍然针对程序员,而不是电气工程师;我链接它是有原因的。
【解决方案2】:

我认为存在物理/成本问题。除了数据线(64)还有地址线(15+)和bank_select线(3)。加上其他行(CS、CAS、RAS...)。例如参见6th Generation Intel® Core™ Processor Family Datasheet。一般情况下,一辆巴士大约有 90 条线路,两辆巴士大约有 180 条线路。还有其他线路(PCIe、Dysplay...) 下一个方面是突发读取。使用bank_select,我们可以选择 8 个库之一。在突发模式下,在所有 bank 中写入一次地址,我们在每个 tick 中按 bank 读取所有 bank 的数据。

【讨论】:

  • 所以您认为所需的总行数太昂贵而无法实施?我假设当数据总线宽度增加到 512 位时,控制线的数量将保持大致相同。
  • 嗯,是的。有参数delta_performance / delta_cost。如果我们将性能提高两倍,那么我们必须支付两倍或更少的费用。如果我们支付超过两次,那么我们不需要这个系统。我想象我们在 64 时有 512 宽度的数据总线。我们增加内存带宽不是八倍。较少的。有延迟。你现在需要多少内存芯片?放在哪里?以及如何追踪PCB?成本增加。其次,有 3 个和 4 个内存接口的套接字(例如 Socket B2、R),因此有增加接口数量而不是数据总线宽度的趋势。
  • 我知道 DRAM 延迟,但这就是为什么首先需要缓存的原因。获取数据需要更长的时间,那么为什么不一次传输更多数据呢?磁盘 I/O 使用相同的原理,即一次将整个文件系统块提取到页面缓存中。 (可能使用预读策略)缓存、所需总线宽度和延迟的相关性是计算机科学中的标准概念。
  • 当然,如果成本太高,实施起来就没有意义
  • @Mike76:突发传输大小不必与总线宽度相关。与 DRAM 之间的传输确实发生在高速缓存行大小的突发中。 (我将此评论放入我的回答中)。
猜你喜欢
  • 2013-07-05
  • 2020-10-18
  • 1970-01-01
  • 2019-10-23
  • 2017-10-19
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
  • 2017-08-25
相关资源
最近更新 更多