繁体   English   中英

处理器如何获取缓存行?

[英]How does a processor fetch cache lines?

当处理器预取数据的高速缓存行时,是从该地址预取最大字节数,还是从该地址预取最大高速缓存行的一半,然后向后递回高速缓存的一半线?

例如,假设高速缓存行为4字节,并从地址0x06进行预取。 它是从0x06 0x07 0x08 0x09提取字节还是从地址0x04 0x05 0x06 0x07预取。

我需要我正在编写的程序并需要对其进行优化的信息。

根据这个 (这自然是英特尔特定)

“高速缓存行的大小为32字节或256位。高速缓存行由处理器的64位数据总线上的四次读取突发填充。”

这意味着从主存储器并行获取8个字节,在这8个字节中没有第一个或最后一个字节,它们是同时到达的,因为这些字节是通过64位宽的总线获取的。

由于需要4次读取来填充高速缓存行,因此Intel似乎没有指定这4次读取的顺序-这意味着您还有一些选择,例如

  • 假设没有特定的顺序
  • 假设地址是从最低到最高,反之亦然。

第一个假设当然是最安全的-因为该订单是我所能找到的无据的文件(因此,它可能取决于模型或其他因素)

缓存行必须对齐,因此,如果您的第一次读取或第一个事务丢失导致缓存行取回,则它位于缓存行的中间,它将返回并读取整个缓存行(因此该部分在您的地址之前和之后的部分)。

通常,缓存使用地址的一部分来确定命中/未命中。 因此,如果说高速缓存行为256字节,则用于确定命中/雾的地址位将从第8位开始,并且取决于高速缓存的大小(深度和方式)将确定要查看的位。 因此,以我的示例为例,如果对地址0x123的访问导致未命中,则将从0x100-0x1FF读取缓存行。

如果这是另一种方式,将会带来更多的逻辑,工作和混乱,如果您可以在任何字节上启动高速缓存行,则将更难确定命中/未命中,和/或您将/可能具有重叠的高速缓存行(某些数据项位于多个位置),因此必须对它们进行整体管理,从而使缓存变慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM