我相信这是通常在C具有这样的代码++阵列C [] = A [] * B []在高性能计算
for(size_t i=0;i<ARRAY_SIZE;++i)
A[i]=B[i]*C[i];
一种常用主张交替是:
double* pA=A,pB=B,pC=C;
for(size_t i=0;i<ARRAY_SIZE;++i)
*pA++=(*pB++)*(*pC++);
我想知道的是,改进这种代码的最好方法,就像IMO需要考虑的事情:
- CPU缓存。 CPU如何填满他们的缓存以获得最佳命中率?
- 我想SSE可以改善呢?
- 另一件事是,如果代码可以并行化呢?例如。使用OpenMP。在这种情况下,指针技巧可能不可用。
任何建议,将不胜感激!
IMO,你的编译器至少应该做一个相当不错的工作来优化你的缓存访问代码。 – zneak 2011-06-08 05:03:45
在第二个循环中,为什么当你有指针时仍然使用'i'? '我'没有在那里使用。 – iammilind 2011-06-08 05:04:46
@iammilind我用来计算数组的个数。反正它不是一个字符串数组。 – xis 2011-06-08 05:07:56