昨天我在想,现在的 x86 CPU 在访问内存时,速度上还是有差距的。在一些新的 Intel CPU 中,RAM 通常以 1333MHz 的速度运行。但 CPU 本身的工作速度约为 3.2 GHz。
因此,当CPU想要访问内存时,它会将地址设置为地址总线,将数据设置为数据总线(假设我们想写e),现在,CPU 是否必须等待内存的额外时间,或者是否有一些 CPU 快速控制器可以处理等待时间并且 CPU 可以执行更多操作?
答案1
当 CPU 想要访问内存时,它会将地址设置为地址总线,将数据设置为数据总线(假设我们要写入),现在,CPU 是否需要等待内存的额外时间
来自乌尔里希·德雷珀 (Ulrich Drepper) 臭名昭著的记忆文章......
对于写入操作,CPU 不一定非要等到值安全地存储在内存中。只要执行以下指令看起来与值存储在内存中具有相同的效果,就没有什么可以阻止 CPU 走捷径。它可以提前开始执行下一条指令。借助可以保存常规寄存器中不再可用的值的影子寄存器,甚至可以更改未完成写入操作中要存储的值。
编辑: 显然,对于读取,所有赌注都是无效的 - 我相当肯定您需要等待数据被读取之后才能对其进行操作;)正如其他人所说,如果来自缓存,这些延迟可能会更低,如果访问主存储器,这些延迟可能会更高。
答案2
在大多数 CPU 中,CPU 和主存储器之间都有少量的快速缓存,用于保存 CPU 当前正在处理的代码和数据,并尝试主动从速度慢得多的主存储器(或下一级缓存)中读取数据。
答案3
“...假设我们要写入...CPU 是否必须等待内存的额外时间,或者是否有一些 CPU 快速控制器可以处理等待时间并且 CPU 可以执行更多操作?”
是的,高性能 CPU 具有缓存、总线接口单元和写缓冲区,因此,在 CPU 执行存储之后,CPU 的其余部分可以(大多数情况下)立即继续处理指令,而缓存、总线接口单元和写缓冲区负责将该数据发送到主存储器。
一些 CPU 会优先执行 LOAD 指令,因此当 STORE 指令后紧接着 LOAD 指令时,CPU 会先从 RAM 加载请求的数据,然后再将数据存储到 RAM。
答案4
如果 CPU 必须等待 RAM(在当今的 CPU 速度下,这包括 CPU 芯片上的 L2/L3 缓存),则 CPU 必须等待。这确实会降低处理速度(以 100% CPU 运行的线程可能会将其大部分周期闲置在等待 RAM 上)。
这就是为什么考虑内存中的数据布局(当缓存线交叉时)会对紧密数据处理代码的性能产生很大影响的原因。
(问题更正:最新的 DDR3 RAM 远远超出了 1333,1600 很常见,并且不考虑超频就可以获得更快的速度。)