什么是交错内存?

2025 年 4 月 23 日 | 阅读 5 分钟

交错内存旨在通过将内存地址均匀地分布在各个内存库中,来补偿动态随机访问内存 (DRAM) 或核心内存相对较慢的速度。这样,连续的内存读写操作就可以使用每个内存库,从而由于减少了等待内存库准备就绪的时间而提高了内存吞吐量。

它不同于多通道内存架构,主要是因为交错内存不会在主内存和内存控制器之间增加通道。然而,通道交错也是可能的,例如,在 Freescale i.MX6 处理器中,它允许在两个通道之间进行交错。对于交错内存,内存地址被分配给每个内存库。

What is Interleaved Memory

交错内存示例

这是一种抽象技术,它将内存划分为许多模块,以便地址空间中的连续字放置在不同的模块中。

假设我们有 4 个内存库,每个内存库包含 256 字节,那么块定向方案(无交错)会将虚拟地址 0 到 255 分配给第一个内存库,将 256 到 511 分配给第二个内存库。但在交错内存中,虚拟地址 0 将属于第一个内存库,1 将属于第二个内存库,2 将属于第三个内存库,3 将属于第四个内存库,然后 4 将再次属于第一个内存库。

因此,CPU 可以立即访问交替的部分,而无需等待内存缓存。有多个内存库轮流提供数据。

在上述 4 个内存库的示例中,虚拟地址为 0、1、2 和 3 的数据可以同时访问,因为它们位于不同的内存库中。因此,我们不必等待完成一次数据获取才能开始下一次操作。

一个具有 n 个内存库的交错内存被称为 n 路交错。在交错内存系统中,仍然有 两个 DRAM 内存库,但逻辑上,该系统看起来像一个两倍大小的内存库。

在下面的 2 个内存库的交错内存库表示中,第一个内存库 0 的长字后面跟着第二个内存库 1 的长字,然后是内存库 0 的第二个长字,接着是内存库 1 的第二个长字,以此类推。

下图显示了 n 个长字的两个物理内存库的组织。逻辑内存库的所有偶数长字都位于物理内存库 0 中,而所有奇数长字都位于物理内存库 1 中。

What is Interleaved Memory

为什么我们使用内存交错?

当处理器请求主内存中的数据时,会将一个数据块 (chunk) 传输到缓存,然后再传输到处理器。因此,每次发生缓存未命中时,都需要从主内存中获取数据。但是主内存相对于缓存来说速度较慢。因此,为了提高主内存的访问速度,使用了交错技术。

例如,我们可以同时访问所有四个模块,从而实现并行处理。数据可以通过较高的位从模块中获取。这种方法有效地利用了内存。

交错内存的类型

在操作系统中,有两种类型的交错内存,即

1. 高位交错: 在高位内存交错中,内存地址的最高有效位决定了特定位置所在的内存库。但在低位交错中,内存地址的最低有效位决定内存库。

最低有效位作为地址发送到每个芯片。一个问题是连续地址倾向于位于同一个芯片中。最大数据传输速率受内存周期时间的限制。它也被称为 内存分块

What is Interleaved Memory

2. 低位交错: 在低位交错中,最低有效位选择内存库(模块)。在这种情况下,连续的内存地址位于不同的内存模块中,从而可以实现比内存周期时间更快的内存访问。

What is Interleaved Memory

交错内存的优点

指令流水线可能需要在同一时间同时从主内存中获取指令和操作数,这在传统的内存访问方式中是不可能的。同样,算术流水线需要同时从主内存中获取两个操作数。因此,为了克服这个问题,内存交错应运而生。

  • 它允许同时访问内存的不同模块。模块化内存技术允许 CPU 在其他模块忙于 CPU 进行读写操作时,与一个模块启动内存访问。因此,我们可以说交错内存能够独立于其他模块的状态响应每一个内存请求。
  • 因此,基于这个显而易见的原因,交错内存使得系统比非交错系统更具响应性和更快速。此外,通过同时进行内存访问,CPU 处理时间也会减少,吞吐量也会增加。交错内存对于具有流水线和向量处理的系统非常有用。
  • 在交错内存中,连续的内存地址分布在不同的内存模块中。例如,在一个字节寻址的 4 路交错内存中,如果字节 0 在第一个模块中,那么字节 1 将在第二个模块中,字节 2 将在第三个模块中,字节 3 将在第四个模块中,然后字节 4 将再次落入第一个模块,依此类推。
  • 一个 n 路交错内存,其中主内存被划分为 n 个内存库,系统可以同时从 n 个不同的内存库访问 n 个操作数/指令。这种内存访问方式可以将内存访问时间减少接近内存库数量的因子。在这种内存交错中,内存位置 i 可以在内存库 i mod n 中找到。

交错 DRAM

主内存通常由一组 DRAM 内存芯片组成,许多芯片可以组合在一起形成一个内存库。通过支持交错的内存控制器,就可以布置这些内存库,使它们交错。

DRAM 中的数据以页为单位存储。每个 DRAM 内存库都有一个行缓冲区,用作访问该内存库中任何页面的缓存。在读取 DRAM 内存库中的页面之前,会先将其加载到行缓冲区中。如果页面立即从行缓冲区读取,则在内存周期中具有最短的内存访问延迟。假设发生行缓冲区未命中,这也称为行缓冲区冲突。由于需要将新页面加载到行缓冲区才能读取,因此会更慢。行缓冲区未命中是由于需要服务同一内存库中的不同内存页面上的访问请求而发生的。行缓冲区冲突会给内存访问带来大量延迟。相比之下,对不同内存库的内存访问可以并行进行,并具有高吞吐量。

在传统的布局中,内存库可以分配一段连续的内存地址,这对内存控制器来说非常简单,并且在完全随机访问场景下的性能与通过交错实现的性能水平相当。然而,由于局部性原理,内存读取很少是随机的,为紧密访问进行优化可以在交错布局中获得更好的性能。

内存的寻址方式不会影响已缓存内存位置的访问时间,只会影响需要从 DRAM 中检索的内存位置。