【发布时间】:2015-05-02 01:56:10
【问题描述】:
我想了解以下程序在主存更新方面的工作原理。
int main() {
short a[256], b[256];
register i;
for (i=0 ; i < 256 ; i++)
a[i] = i;
for (i=0 ; i < 256 ; i++)
b[i] = 255 - i;
for (i=0 ; i < 256 ; i++)
b[i] = b[i] - a[i];
return 0;
}
我有一个 16 位的地址总线,主内存以字节组织,缓存大小为 512 2-way set associative,块大小为 16 字节,CPU 只能从缓存中读取信息。
当我们使用 Write Through no write allocate 策略时会发生什么 什么时候我们使用回写写分配策略?
【问题讨论】:
-
您的 CPU 有 8 KB 的缓存,您的代码使用 1 KB 的连续堆栈空间,此内存跨越 64 或 65 条不同的缓存行,所有内容都非常适合缓存。然而,实际的缓存行为取决于如何通过缓存读取程序代码,可能但不太可能导致争用以及如何在缓存写入时将数据读入缓存。第三个循环不应导致缓存未命中。
标签: c caching computer-architecture