优化数组c ++算术计算的常用策略是什么?

ZHO*_*HOU 2 c c++ optimization

例如,我有三个float阵列a,b并且c,我想补充ab元素明智达c.一种天真的方式就像

for(int i = 0; i < n; i++){
    c[i] = a[i] + b[i];
}
Run Code Online (Sandbox Code Playgroud)

据我所知,OpenMP可以并行化这段代码.在OpenCV代码中,我看到一些标志像CV_SSE2CV_NEON其相关的优化.

如果我希望我的代码高效,那么优化这些代码的常用方法是什么?

Bas*_*tch 6

没有共同的策略.您应该确定它是一个瓶颈(如果n阵列的大小足够小,它可能不是瓶颈).

一些编译器能够通过使用向量机指令来优化(至少在一些简单的情况下).使用GCC尝试编译(或其他...或...参数,特别是如果你是交叉编译)和可能gcc -O3 -mtune=native-mtune=-mfpu=-ffast-math

你可以考虑使用OpenMP,OpenCL(带有GPGPU),OpenACC,MPI,显式线程,例如pthreadsC++ 11 std :: thread -s等......(以及几种方法的巧妙组合)

我会把优化留给编译器,只考虑改进它,如果你测量它是一个瓶颈.您可以花几个月或几年(或者甚至专注于您整个工作生活中)的开发人员时间来改进它....

您还可以使用一些数值计算库(例如LAPACK,GSL等)或专用软件,如Scilab,Octave,R等...

另请阅读http://floating-point-gui.de/