【发布时间】:2014-07-21 06:35:33
【问题描述】:
假设我们有两个基本类型的数组a 和b(比如float),我们需要为每个有效索引i 计算a[i] + b[i],并存储结果。迭代数组以最大化缓存命中的最佳方法是什么?是从前到后、从后到前还是其他?
【问题讨论】:
-
首先,不要使用普通数组,如果您知道编译时的大小,请使用
std::array,或者使用std::vector。 -
我会说,以“最正常的方式”对您的迭代进行编码,并让编译器完成它的工作;)
-
如果你关心这个,你应该设置一些基准。
-
在现代 CPU 上,差异通常可以忽略不计,编译器在优化方面通常比您更聪明。除非你有一个事实原因(即你已经分析了你的代码并得出你有瓶颈的结论),否则你不应该关心这个。
-
@StefanoSanfilippo 我正在使用索引技巧来消除 for/while 循环,但我的编译器不够聪明,无法弄清楚我在做什么实际上是一个展开的循环。