我有一个函数,它从用户接收一个一维数组和一个数字,并将这两个值相加。
示例:
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 中读到了 block 方法但我的印象是它必须至少是二维的才能发挥作用。有什么方法可以改进这个功能?
最佳答案
您的代码已经具有出色的空间局部性。空间局部性定义为
If a particular memory location is referenced at a particular time, then it is likely that nearby memory locations will be referenced in the near future. (Wikipedia)
做得更好的最简单方法是使用处理器的 vector 指令,假设处理器有它们并且编译器不会为您做这件事。例如,x86 处理器具有 SSE 指令,可以加快您正在执行的操作。
如果数组足够大,那么您可以在处理器支持的情况下进行缓存预取。请注意,过去几年生产的英特尔处理器会自动执行此操作。
关于c - 使用缓存局部性改进加法函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30366371/