缓存行大小会影响内存访问延迟吗?

时间:2019-04-12 08:02:56

标签: memory computer-science hardware cpu-architecture

Intel体系结构已经有64个字节的缓存很长时间了。我很好奇,如果处理器使用64位缓存行而不是64位缓存行,这会改善RAM到寄存器数据传输的延迟吗?如果是这样,多少钱?如果没有,为什么?

谢谢。

1 个答案:

答案 0 :(得分:2)

传输大量数据当然会增加通信时间。但是由于内存的组织方式,增加的幅度很小,并且不会影响内存的注册延迟。

内存访问操作分为三个步骤:

  1. 位线预充电:发送行地址并且对内存的内部总线进行预充电(持续时间tRP)
  2. 行访问:读取存储器的内部行并将其写入内部锁存器。在这段时间内,发送了列地址(持续时间tRCD)
  3. 列访问:在行锁存器中读取选定的列,并开始将其发送到处理器(持续时间tCL)

行访问是一项长时间的操作。 存储器是单元元素的矩阵。为了增加内存容量,必须使单元尽可能小。而且,当读取一行单元时,必须驱动一条非常大电容的总线,该总线沿着存储列。电压摆幅非常低,并且有灵敏放大器放大器来检测微小的电压变化。

完成此操作后,完整的行将存储在锁存器中,读取速度很快,并且通常以突发模式发送。

考虑到具有1GHz IO周期时间的典型DDR4内存,我们通常具有tRP / tRCD / tCL = 12-15cy / 12-15cy / 10-12cy,整个时间约为40个内存周期(如果处理器频率为4 GHz,这是约160个处理器周期)。然后,每个周期两次以突发模式发送数据,每个周期发送2x64位。因此,数据传输将为64个字节添加4个周期,而对于32个字节将仅添加2个周期。

因此将缓存行从64B减少到32B可以将传输时间减少约2/40 = 5%

如果行地址不变,则不需要预充电和读取存储器行,并且访问时间约为15个存储器周期。在这种情况下,传输64B与32B的时间的相对增加较大,但仍受限制:〜2/15〜15%。

这两个评估都没有考虑处理内存层次结构中的未命中所需的额外时间,实际百分比甚至会更少。

数据可以通过存储器“先输入关键字”发送。如果处理器需要给定字,则该字的地址将发送到内存。读取行后,内存将首先发送该字,然后发送高速缓存行中的其他字。因此,无论接收到什么高速缓存行,高速缓存都可以在收到第一个字后立即满足处理器请求,并且减小行宽不会对高速缓存延迟产生影响。因此,如果使用此功能,则内存到寄存器的时间不会改变。

在最近的处理器中,不同缓存级别之间的交换基于缓存行宽,并且先发送关键字并没有带来任何收益。

此外,由于行空间的限制,较大的行尺寸会减少强制性丢失,并且减小行尺寸会对高速缓存未命中率产生负面影响。

最后,使用更大的缓存行会增加缓存和内存之间的数据传输速率。

大的高速缓存行的唯一不利方面(除了传输时间增加很小)是,高速缓存中的行数减少了,冲突未命中可能增加了。但是随着现代缓存的巨大关联性,这种影响是有限的。