c - 英特尔数组符号 vector 运算

标签 c intel cilk-plus

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

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/

相关文章:

c - 如何在 C 中将 char* 添加到 char**

c - 在 C 中格式化字符串

c - mach_vm_region 与 mach_vm_region_recurse

javascript - 使用 intel.xdk.file.uploadToServer 时的其他参数?

c++ - 在 Mac OS X (El Capitan) 上安装 Cilk Plus 时出错

c - 在c中打印链表值时出现奇怪的值

visual-studio-2012 - 将 OpenSSL 与 Intel SGX Enclave 结合使用

performance - 关于超线程中 L1 Cache 的自适应模式

parallel-processing - Cilk 或 Cilk++ 或 OpenMP

c++ - 找不到reducer_min_index的calc_min函数