数组 – C – 缓存行和关联

数组 – C – 缓存行和关联,第1张

概述上下文 阅读有关缓存优化的文章(与循环中的缓存行关联..) 问题与此上下文有关:1024个整数数组. 大小:cpu cache 64k,缓存行32bytes,整数大小:4个字节. 英特尔核心2二人组 题 根据我的cpu,8个整数适合缓存行. [0,1,2,3,4,5,6,7,8,9,10,...,1023] ^If I want to access 4 and go downw 上下文

阅读有关缓存优化的文章(与循环中的缓存行关联..)

问题与此上下文有关:1024个整数数组.

大小:cpu cache 64k,缓存行32bytes,整数大小:4个字节.

英特尔核心2二人组

根据我的cpu,8个整数适合缓存行.

[0,1,2,3,4,5,6,7,8,9,10,...,1023]         ^If I want to access 4 and go downward,1 and 0 will be loaded already. 5,7 are loaded uselessly.[0,..,1023]               ^If I want to access 7 and go downward,all the next elements will be in cache already. if I want to go upward,according to my cpu I will have to load another cache line immediatly after the arr[7] read.

我对么 ?

走得更远

但是什么告诉我,arr [4]不在一个会导致缓存行加载的地址而不是arr [7]?
如果我的陈述是真的,我们不仅应该考虑阵列内对齐,而应该考虑程序的整个内存对齐,以尽量减少缓存浪费,对吗?

解决方法 就你的主要问题而言,是的,你在两种情况下都是正确的.

在第二种情况下,在加载arr [7]并且可能希望继续向上的情况下,您应该注意,编译器或某些预取机制可能会考虑此类数据的spatial locality,从而提高性能.

更进一步,如果数组在内存中没有正确对齐,确实读取数组中的其他一些地址可能会导致缓存行加载而不是arr [7],但在这种情况下,对齐不是由您决定,而是由编译器决定.

总结

以上是内存溢出为你收集整理的数组 – C – 缓存行和关联全部内容,希望文章能够帮你解决数组 – C – 缓存行和关联所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241284.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存