首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当访问数组的连续元素时,会发生哪种类型的缓存未命中?

当访问数组的连续元素时,会发生哪种类型的缓存未命中?
EN

Stack Overflow用户
提问于 2019-02-02 05:27:50
回答 1查看 110关注 0票数 0

在C中,如果你有这种类型的循环:

代码语言:javascript
运行
复制
for (i = 0; i < N; i++)
  sum += a[i]

当数组'a‘包含整数(4字节),缓存块可以存储比方说32字节,那么我知道循环每8次迭代就会有一次冷未命中,因为处理器会将8个整数加载到一个块中,然后直到第9次迭代才会得到缓存未命中。我的理解是正确的吗?当它在a获得缓存未命中时,它会将a-a7加载到缓存块中,并且不会再次将任何'a‘加载到缓存中,直到它在a8获得另一次冷未命中

假设^^是正确的,我真正的问题是,如果你有这样的东西会发生什么:

代码语言:javascript
运行
复制
for (i = 0; i < N; i++)
      a[i] = a[i+1]

其中'a‘尚未初始化?您会得到类似于上面的代码吗?在上面的代码中,处理器会查找ai+1的每个连续值,并且每隔8个值才会丢失一次。或者它也会在缓存中搜索ai,以便设置值?是否存在与ai相关的缓存未命中,或者仅与ai+1相关

最后,如果你有

代码语言:javascript
运行
复制
for (i = 0; i < N; i++)
      b[i] = a[i]

这是否类似于第一个示例,在第一个示例中,它查找ai的每个值并在每8次迭代中获得缓存未命中,或者设置bi的值是否也会导致缓存未命中?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-02-03 13:53:21

这取决于asm代码,你应该先读一读它,看看你的程序是先读取ai还是ai+1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54487360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档