【问题标题】:Intel array notation vector operations英特尔数组符号向量操作
【发布时间】:2013-08-13 10:31:14
【问题描述】:

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

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 向量完成此类向量运算时,前者已完成。

提前感谢您的回答!

【问题讨论】:

    标签: c intel cilk-plus


    【解决方案1】:

    icc 12.1 中的数组表示法生成了临时值,因为这是 Fortran 所做的,而且看起来更安全。然后我们发现,正如问题所指出的那样,临时人员会对性能产生很大影响。所以数组表示法在 icc 13.0(和public specification)中进行了修改,因此不会生成临时值。

    不生成临时对象符合 C++ 的“以最小代价进行抽象”的理念,以及 C/C++ 不为结构分配生成临时对象的事实。

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

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 2014-04-07
      • 2011-09-18
      • 2011-04-29
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      相关资源
      最近更新 更多