如何解决空间局部性的缺失次数
我很困惑如何在下面的示例中计算未命中数(来自计算机架构:定量方法)
示例:
对于下面的代码,判断哪些访问有可能导致数据缓存 错过。接下来,插入预取指令以减少未命中。最后,计算 执行的预取指令数和预取避免的未命中数。 假设我们有一个带有 16 字节块的 8 KB 直接映射数据缓存, 它是一个写分配的写回缓存。 a和b的元素是8 字节长,因为它们是双精度浮点数组。有3行 a 为 100 列,b 为 101 行和 3 列。我们也假设他们 程序开始时不在缓存中。
for (i = 0; i < 3; i = i+1)
for (j = 0; j < 100; j = j+1)
a[i][j] = b[j][0] * b[j+1][0];
答案:
编译器会首先判断哪些访问有可能导致缓存 错过;否则,我们将浪费时间为数据发布预取指令 那将是命中。 a 的元素按它们存储的顺序写入 记忆,因此 a 将受益于空间局部性:j 的偶数值将丢失 并且奇数值会命中。由于 a 有 3 行 100 列,它的访问将 导致 3 × (100/2) 或 150 未命中。
如何计算 150 次未命中或为什么将 100 次除以 2?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。