使用缓存局部性改进添加功能

时间:2015-05-21 06:43:36

标签: c arrays performance for-loop optimization

我有一个函数,它接收来自用户的一维数组和数字,并将这两者加在一起。

样品:

0 1 2 3 4 5 6 7 8

用户:9

9 10 11 12 13 14 ...

我一直在使用以下代码:

for(int i =0; i < arr; i++){
   arr[i] = arr[i] + usrNumber;
}

现在这看起来非常低效,因为我必须迭代遍历数组的每个位置并将值加在一起。

我已经从previous post读到了块方法,但我的印象是它必须至少是二维的才能工作。有什么方法可以改善这个功能?

1 个答案:

答案 0 :(得分:2)

您的代码已具有出色的空间位置。空间局部性定义为

  

如果在特定时间引用了特定的内存位置,则很可能在不久的将来引用附近的内存位置。 (维基百科)

做得更好的最简单方法是使用处理器的向量指令,假设处理器有这些指令并且编译器没有为您执行此操作。例如,x86处理器具有 SSE 指令,可以加快您的工作速度。

如果阵列足够大,那么如果处理器支持它,你可以进行缓存预取。请注意,过去几年中制造的英特尔处理器会自动执行此操作。