【发布时间】:2013-09-15 08:26:28
【问题描述】:
当处理器预取数据的缓存行时,它是从该地址预取最多字节数,还是从该地址预取最多缓存行的一半并向后最多缓存行的一半?
例如假设缓存行是 4 个字节并且从地址 0x06 预取。它会在 0x06 0x07 0x08 0x09 处获取字节还是从地址 0x04 0x05 0x06 0x07 中预取。
我需要此信息用于我正在编写并需要优化的程序。
【问题讨论】:
-
我绝对认为这是高度依赖于实现的。也许添加细节会有所帮助...
-
高速缓存行大概是 64 字节,它从最低六位全为零的地址开始。您可以通过屏蔽地址的最低六位来找到地址的高速缓存行。 (或者任何你的缓存线大小的二次幂。)
-
@KerrekSB 请将此评论作为答案。
-
@KerrekSB 您的评论刚刚回答了我的问题。好的,就像在我给出的示例中一样,假设缓存行是 4 个字节,并且我在地址 0x06 处获取我将在缓存中获得的内容将是 0x04、0x05、0x06 和 0x07 处的字节。下一个高速缓存行将位于 0x08。所以假设我想获取 0x0A 的字节,然后我会将 0x08、0x09、0x0A、0x0B 预取到缓存中!
-
See this question 用于查找实际大小。看起来它在旧 Intel 上是 32 字节,而在现代 Intel 上是 64 字节。
标签: caching optimization assembly processor