访问数组的连续元素时,什么类型的高速缓存未命中的发生?

问题描述 投票:0回答:1

在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]招致高速缓存未命中呢?

谢谢!

c caching
1个回答
0
投票

它依赖于汇编代码,你应该阅读一下,看看你的程序是否读[I]第一或第[i + 1]第一。

© www.soinside.com 2019 - 2024. All rights reserved.