如果发生缓存未命中,数据将被直接移动到寄存器或首先移动到缓存然后注册?

问题描述 投票:-1回答:1

如果发生高速缓存未命中,数据将被直接从主存储器移动到寄存器,或者数据首先被移动到高速缓存然后注册?是否有直接的方式将寄存器与主存储器连接?

cpu cpu-architecture cpu-registers cpu-cache
1个回答
3
投票

我想你在询问缓存未命中负载是否必须等待缓存行从外部缓存到达后的L1负载使用延迟。即等待线路写入L1,然后正常重试负载。

我几乎可以肯定高性能CPU不会这样工作。 L2命中延迟对于许多工作负载很重要,并且您需要加载缓冲区跟踪传入缓存行,以便知道何时重新启动加载。所以你只需要抓取数据,同时将数据写入缓存。 TLB检查已作为生成物理地址以发送到外部高速缓存的一部分完成。

大多数真正的CPU使用早期重启设计,一旦他们等待的字/字节到达,管道就会重新启动,因此其余的缓存行将“在后台”传输。

进一步的优化是关键字优先,它要求从所需的字开始发送高速缓存行,因此高速缓存行中间的字的请求未命中可以首先接收该字。我认为现代DDR DRAM在从主存储器读取时仍然支持这一点,在指定的64位块上启动64字节突发。我不是100%确定现代无序CPU使用它;当乱序执行允许同一行的多个未完成的未命中时,它可能使它更复杂。

有关早期重启和关键字优先的一些讨论,请参阅which is optimal a bigger block cache size or a smaller one?


是否有直接的方式将寄存器与主存储器连接?

这取决于你所说的“直接”。在现代高性能CPU中,将有2或3层缓存和一个具有自己缓冲的内存控制器,以仲裁对多个内核的内存访问。所以不,你不能。

如果您设计一个简单的单核CPU,具有特殊的缓存绕过加载和存储指令,那么肯定。或者如果你认为早期重启是“直接的”,那么它已经发生了。

对于商店,x86和其他一些架构具有高速缓存旁路存储,但x86的MOVNT指令不直接将寄存器与存储器连接。存储进入行填充缓冲区,当满了时刷新,因此您可以进行写入组合。

还有不可缓存的内存区域:加载或存储到不可缓存的内存在架构上是“直接的”,但在实际的微体系结构中,它仍然通过加载/存储执行单元通过内存层次结构通过L1D用于与内存通信的相同机制控制器。

© www.soinside.com 2019 - 2024. All rights reserved.