英特尔文档没有说明是否有人这样做,例如数组的乘法和加法:
c[:] = c[:] + a[:]*b[:]
它会做以下事情吗:
for(i=0; i<N; i++) tmp[i] = a[i]*b[i];
for(i=0; i<N; i++) c[i] = c[i] + tmp[i];
或
for(i=0; i<N; i++) c[i] = c[i] + a[i]*b[i];
对于大型阵列,性能存在显着差异。据我所知,当使用 STL vector 完成此类 vector 操作时,前者已完成。
提前感谢您的回答!
最佳答案
icc 12.1 中的数组符号生成了临时文件,因为这是 Fortran 所做的,而且看起来更安全。然后我们发现,正如问题所述,临时对象会对性能产生很大影响。因此在 icc 13.0(和 public specification)中修改了数组符号,因此不会生成临时文件。
不生成临时对象符合 C++ 的“抽象与最小惩罚”的哲学,以及 C/C++ 不为结构分配生成临时对象的事实。
另见我的幻灯片 33 ISC 2012 tutorial .
关于c - 英特尔数组符号 vector 运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18181464/