xis*_*xis 1 c++ arrays performance
我相信通常在C++中使用这样的代码
for(size_t i=0;i<ARRAY_SIZE;++i)
A[i]=B[i]*C[i];
Run Code Online (Sandbox Code Playgroud)
一个普遍提倡的变更是:
double* pA=A,pB=B,pC=C;
for(size_t i=0;i<ARRAY_SIZE;++i)
*pA++=(*pB++)*(*pC++);
Run Code Online (Sandbox Code Playgroud)
我想知道的是,改进此代码的最佳方法,因为IMO需要考虑以下事项:
任何建议,将不胜感激!
我的g ++ 4.5.2为两个循环生成完全相同的代码(修复了错误double *pA=A, *pB=B, *pC=C;,它是
.L3:
movapd B(%rax), %xmm0
mulpd C(%rax), %xmm0
movapd %xmm0, A(%rax)
addq $16, %rax
cmpq $80000, %rax
jne .L3
Run Code Online (Sandbox Code Playgroud)
(我的ARRAY_SIZE是10000)
编译器的作者已经知道了这些技巧.但是,OpenMP和其他并发解决方案值得研究.