在C,F你有这种类型的循环:
for (i = 0; i < N; i++)
sum += a[i]
其中阵列“A”包含整数(4个字节)和一个高速缓冲存储器块可以存储的发言权,32个字节,那么我知道有将是一个冷未命中每8次迭代循环的,因为处理器将8个整数加载到一个块,则无法获得高速缓存未命中,直到第9个迭代。难道我的理解是正确的,当它在[0]加载得到高速缓存未命中A [0] -A [7]到高速缓存块,并且不会将任何的再次直到它得到加载“A”到缓存在另一冷小姐[8]?
假设^^是正确的,我真正的问题是,如果你有这样的事情会发生什么:
for (i = 0; i < N; i++)
a[i] = a[i+1]
其中,“一”尚未初始化?你会得到类似上面的东西,其中处理器查找的每一个连续的值[I + 1],只错过每8?抑或是搜索[I]高速缓存,以及以设定的值?会有一个[I]相关的高速缓存未命中或仅仅是第[i + 1]?
最后,就如果你有发生什么
for (i = 0; i < N; i++)
b[i] = a[i]
这将是类似于第一个例子,它会寻找[I]的每个值和每8个迭代得到高速缓存未命中,还是设置b的值[I]招致高速缓存未命中呢?
谢谢!
它依赖于汇编代码,你应该阅读一下,看看你的程序是否读[I]第一或第[i + 1]第一。