c-英特尔数组表示法矢量运算



英特尔文档没有说明是否这样做,例如数组的乘法和加法:

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向量进行此类向量操作时,前一个操作已经完成。

提前感谢您的回答!

icc12.1中的数组表示法生成了临时的,因为Fortran就是这样做的,而且看起来更安全。然后我们发现,正如问题所指出的,临时性会对性能产生很大影响。因此,在icc13.0中(以及在公共规范中)对数组表示法进行了修订,因此不会生成临时的。

不生成临时性与C++的"惩罚最小的抽象"哲学以及C/C++不为结构分配生成临时性的事实是一致的。

另请参阅我的ISC 2012教程的幻灯片33。

相关内容

  • 没有找到相关文章

最新更新