我正在使用科学计算代码。如果可能的话,我想稍微改进一下。我用放大器检查代码。最耗时(大量使用)的代码是:
double a = 0.0;
for(j = 0; j < n; j++) a += w[j]*fi[((index[j] + i)<<ldf) + k];
对我来说,它只是 w 和 fi 的点积。我想知道:
- 英特尔编译器会自动执行吗?(我的意思是将循环视为两个向量化数组的点积。)
- 有没有办法改进代码?(我的意思是可能定义另一个与 w 大小相同的数组 a1。然后所有相乘的数字都可以存储在 a1 中(展开循环?)。最后求和。)
- 其他建议?
我正在使用带有视觉工作室的并行作曲家 2013。任何想法都会被欣赏!:)