英特尔架构已经有64字节缓存很长时间了。我很好奇,如果处理器没有64字节的高速缓存线,而是有32字节或16字节的单身汉,这会改善RAM到寄存器的数据传输延迟吗?如果是的话,多少钱?如果没有,为什么?
谢谢。
发布于 2019-04-12 09:35:50
当然,传输大量的数据会增加通信时间。但是,由于内存的组织方式和注册延迟不会影响内存,所以增加的幅度很小。
内存访问操作分三个步骤完成:
行访问是一个很长的操作。内存是单元元素的矩阵。为了增加内存容量,必须尽可能地使单元格变小。当读取一行细胞时,一个人必须驾驶一条非常大的、容量很大的母线,它沿着记忆列走。电压波动很低,并且有感应式放大器来检测小的电压变化。
一旦完成这个操作,一个完整的行就会被记忆在锁存器中,并且读取它们的速度很快,并且通常以突发模式发送。
考虑到一个典型的DDR4存储器,在1GHz的IO周期时间内,我们通常有tRP/tRCD/tCL=12-15cy/12-15cy/10-12cy,完整的时间约为40个存储周期(如果处理器频率为4 4GHz,则为~160个处理器周期)。然后以突发模式每周期发送两次数据,每个周期发送2x64位数据。因此,数据传输会增加4个周期(64个字节),而它只会增加2个周期(32个字节)。
因此,将缓存线从64B减少到32B将使传输时间减少2/40=5%。
如果行地址不改变,则不需要预充电和读取内存行,访问时间为~15个内存周期。在这种情况下,转移64B对32B的时间相对增加较大,但仍然有限:~2/15~15%。
这两项评估都没有考虑到处理记忆层次中的遗漏所需的额外时间,实际百分比甚至更小。
数据可以由内存发送“关键字第一”。如果处理器需要一个给定的字,这个字的地址会被发送到内存中。读取行后,内存首先发送这个单词,然后发送缓存行中的其他单词。因此,缓存可以在接收到第一个字时立即为处理器请求服务,无论缓存行是什么,减少行宽都不会对缓存延迟产生影响。因此,如果使用此功能,内存到寄存器的时间就不会改变。
在最近的处理器中,不同缓存级别之间的交换是基于缓存线宽,而首先发送关键字并没有带来任何增益。
此外,由于空间局部性,较大的行大小会减少强制丢失,而减小行大小会对缓存的漏分率产生负面影响。
最后,使用更大的缓存线可以提高缓存和内存之间的数据传输速率。
大缓存行的唯一负面方面(除了小的传输时间增加)是缓存中的行数减少,冲突丢失可能增加。但由于现代缓存具有很大的联想性,这种效应是有限的。
https://stackoverflow.com/questions/55647071
复制相似问题