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

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

回答:

我想你是问缓存未命中负载是否必须等待缓存行从外部缓存到达后的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使用的相同机制从加载/存储执行单元经过内存层次结构与内存控制器交谈。

以上是 如果缓存未命中发生,数据将直接移动到寄存器或首先移动到缓存然后注册? 的全部内容, 来源链接: utcz.com/qa/263932.html

回到顶部