Memory 缓存线大小是否影响内存访问延迟?

Memory 缓存线大小是否影响内存访问延迟?,memory,computer-science,hardware,cpu-architecture,Memory,Computer Science,Hardware,Cpu Architecture,英特尔体系结构已经有64字节缓存很长一段时间了。我很好奇,如果一个处理器没有64字节的缓存线,而是有32字节或16字节的缓存线,这会改善RAM来注册数据传输延迟吗?如果是,多少钱?若否,原因为何 谢谢。传输大量数据当然会增加通信时间。但是,由于内存的组织方式,增加的幅度非常小,而且确实如此。注册延迟不会影响内存 内存访问操作分为三个步骤: 位线预充电:发送行地址并对内存的内部总线预充电(持续时间tRP) 行访问:内存的内部行被读写到内部锁存器。在此期间,发送列地址(持续时间tRCD) 列访问:所

英特尔体系结构已经有64字节缓存很长一段时间了。我很好奇,如果一个处理器没有64字节的缓存线,而是有32字节或16字节的缓存线,这会改善RAM来注册数据传输延迟吗?如果是,多少钱?若否,原因为何


谢谢。

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

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

  • 位线预充电:发送行地址并对内存的内部总线预充电(持续时间tRP)
  • 行访问:内存的内部行被读写到内部锁存器。在此期间,发送列地址(持续时间tRCD)
  • 列访问:所选列在行锁存器中读取,并开始发送到处理器(持续时间tCL)
  • 行访问是一个很长的操作。 内存是由单元元素组成的矩阵。为了增加内存容量,必须使单元尽可能小。当读取一行单元时,必须驱动一条电容非常大的总线,该总线沿着存储列运行。电压摆幅非常低,有检测放大器来检测微小的电压变化

    一旦这个操作完成,一个完整的行被存储在锁存器中,读取它们可以很快,并且通常以突发模式发送

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

    因此,将缓存线从64B减少到32B将使传输时间减少约2/40=5%

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

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

    数据可以通过内存“关键字优先”发送。如果处理器需要一个给定的字,这个字的地址将被发送到内存。一旦读取了行,内存首先发送这个字,然后发送缓存线中的其他字。所以,缓存可以在接收到第一个字后立即为处理器请求服务,无论缓存线是什么,并且减小线宽不会对缓存延迟产生影响。因此,如果使用此功能,用于注册时间的内存不会改变

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

    此外,由于空间局部性,较大的行大小会减少强制未命中,而减小行大小会对缓存未命中率产生负面影响

    最后,使用较大的缓存线可以提高缓存和内存之间的数据传输速率


    大型缓存线的唯一负面影响(除了传输时间的小幅度增加)是缓存中的缓存线数量减少,冲突未命中率可能增加。但是,由于现代缓存具有很大的关联性,这种效果是有限的。

    将传输时间减少5%,但这并不是总的缓存未命中延迟:您将为CPU留出时间来确定这是三级缓存未命中,将请求从内存层次结构向下发送到内存控制器并再次备份。Re:early restart=在关键字到达时恢复执行,关键字优先:这在内部总线比缓存线窄得多的CPU中非常有用。但可能在现代Intel CPU上(Haswell和后来的L2 L1d缓存的总线为64字节宽),可能没有必要先使用关键字。整条生产线以相同的周期到达。BeeOnRope和我不久前讨论过这个问题,但我在谷歌上找不到/我们的结论是,即使除了一个完整的线路总线,硬件预取等可能意味着在一个现代高端无序执行CPU中通常没有办法首先执行CW。您也可以在同一行上有多个未完成的未命中,而“关键”未命中的可能是地址已准备就绪的未命中。因此,对于许多高端CPU来说,可能不值得这么复杂,因为一旦从DRAM最终到达内存控制器,整条线路只需要几个内部周期就可以通过内部总线发送。(对于整个内存子系统来说,延迟*带宽乘积很高。)所有给定的时间显然都是近似值。关于缓存未命中的额外时间,您是对的,实际延迟可能会增加40个处理器周期(即10个内存周期),但几乎不可能获得关于这些计时的精确信息。这并没有改变总体思路,对大缓存线的影响很小。关于关键字问题,所有内部传输都是线宽的,很可能不再使用。即使在Skylake(客户端)上,也显示核心之间的环总线只有32字节宽,因此L3L2传输需要2个周期才能发送一条线。是的,缓存未命中的负载使用延迟主要由DRAM延迟决定,但是~42个核心时钟并非完全不重要。在许多核心Xeon上更糟糕,在到达内存控制器之前,环总线上的跳数更多。(可测量的延迟更差,单线程带宽也更差。)不过编辑得不错。