【发布时间】:2012-07-09 04:09:05
【问题描述】:
假设我有两个相同长度的floats 数组n:
float *a, *b;
int n;
我想计算他们的标量积。天真的方法是这样的:
int i;
float result=0;
for (i=0;i<n;i++)
result += a[i]*b[i];
但是从数据局部性的角度来看,这很糟糕,尤其是如果n 很大或者a 和b 在内存中相距很远。在每次迭代中,我们交替从a 和b 获取值。有什么方法可以提高效率吗?
【问题讨论】:
-
您只需对每个数组进行一次顺序传递。两步就好了。所以我怀疑你能做得更好——除非你当然有一个外循环。