4、burst猝发模式
第三大节说明了 CPU 如何向内存条中的一个 rank 读写 64 比特,而如果读者对现代处理器有更多的了解,即了解 cache 的话,就会想到 CPU 在访问内存单个字的时候,不仅需要访问这个字,还需要把这个字所在的缓存行全部搬进 cache 中,因此内存不仅要一次提供一个字,还要提供一个缓存行( cache line )。
缓存行一般比较大,比如 8 个 64 比特,因此实际上内存要一次提供 8×64=512 比特数据。但如果按照第三节的模式访问内存,那么一次只能提取出 64 比特,即提取一个字,这并不满足缓存行的要求,为此,我们提出对内存使用“猝发模式”。
首先明确一点,缓存行内的各个字在内存上是紧邻的。有了这个基础,我们就可以灵活地使用 cell 阵列中的行缓存( row buffer )。第二节说到单元行进入放大器的行缓存之后,并不会在读写一个比特后立刻写回 cell 阵列,而是待在行缓存里等待下一个读写命令,如果下一个读写命令仍然发生在该单元行,那就可以直接操作 row buffer 。
在猝发模式里,我们更进一步,每当我们读取 cell 阵列中的一个比特,我们不仅把这个比特送到输出缓存中,而且紧接着把这个比特所在缓存行的各个比特都送到输出缓存,这样就完成了一次“猝发”,即把目标比特周围的多个比特连续地读出。
第三大节说明了 CPU 如何向内存条中的一个 rank 读写 64 比特,而如果读者对现代处理器有更多的了解,即了解 cache 的话,就会想到 CPU 在访问内存单个字的时候,不仅需要访问这个字,还需要把这个字所在的缓存行全部搬进 cache 中,因此内存不仅要一次提供一个字,还要提供一个缓存行( cache line )。
缓存行一般比较大,比如 8 个 64 比特,因此实际上内存要一次提供 8×64=512 比特数据。但如果按照第三节的模式访问内存,那么一次只能提取出 64 比特,即提取一个字,这并不满足缓存行的要求,为此,我们提出对内存使用“猝发模式”。
首先明确一点,缓存行内的各个字在内存上是紧邻的。有了这个基础,我们就可以灵活地使用 cell 阵列中的行缓存( row buffer )。第二节说到单元行进入放大器的行缓存之后,并不会在读写一个比特后立刻写回 cell 阵列,而是待在行缓存里等待下一个读写命令,如果下一个读写命令仍然发生在该单元行,那就可以直接操作 row buffer 。
在猝发模式里,我们更进一步,每当我们读取 cell 阵列中的一个比特,我们不仅把这个比特送到输出缓存中,而且紧接着把这个比特所在缓存行的各个比特都送到输出缓存,这样就完成了一次“猝发”,即把目标比特周围的多个比特连续地读出。