缓存乘法运算

时间:2013-05-02 17:02:13

标签: c++ caching

我必须在功率X(X在1到300之间的任何地方)的基数50中提出许多数字。 这些数字存储为bignums。

我的问题是:因为我会多次乘以两个bignums数字(基数为50),缓存这些乘法会更快吗?

因此,每当我将a[]乘以b[]时,我必须多次a[i]*b[j] a[i]b[j]基数为50。< / p>

我在想,而不是每次实际做a[i]*b[j],事先创建矩阵不会更快:prod[50][50],其中prod[i][j] = i*j。然后我会有类似prod[a[i]][b[j]]的内容。

是否更快地从内存读取然后实际进行乘法?

如果我的问题不明确,请快速举例:

而不是:

for(int i=1; i<=100; ++i){
   sum += 50*30;
   sum += 37*20;
}

这是否更快:

for(int i=1; i<=100; ++i){
   sum += prod[50][30];
   sum += prod[37][20];
}

1 个答案:

答案 0 :(得分:3)

简短回答:是的,很有可能。

答案很长:这取决于。计算高速缓存中的乘法可能比从内存中获取大数字更快(如果它不在高速缓存中)。

你真的需要实现缓存并对“无缓存”进行基准测试,看看你得到了什么。

还要记住,权力的计算能力不仅仅是乘法,例如,如果我们想要y = x 5 ,而不是计算y = x * x * x * x * x,我们可以计算{{1然后x2 = x * x;,这只是四次乘法而不是五次。如果你有x 300 ,你可以通过多次使用相同的方案(计算x4和x16等)来节省一些资金。