1
假设我有float
小号长度相同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
获取值。有什么办法可以让这个效率更高?
你只是通过每个阵列进行单次连续传递。两步很好。所以我怀疑你可以做得更好 - 除非你有一个外部循环。 – Mysticial 2012-07-09 04:10:40