它是
典型地
在迭代过程中,更快(为什么)同时执行所有指令?出于缓存的原因,这似乎是必要的。或者我们可以重复几次吗?
需要注意的是
count
很大(1000到1000 000)。
//original loop, wish to separate into several loops:
for(size_t i=0; i<10000000; ++i){
floatVec_A[i] += floatVec_B[i] - floatVec_C[i]*floatVec_D[i];
floatVec_A[i] = std::sin(floatVec_A[i]);
//and so on
}
与我的愿望相反(但恐怕这可能是一个缓慢的方法
…通常
?):
for(size_t i=0; i<10000000; ++i){
floatVec_A[i] += floatVec_B[i];
}
for(size_t i=0; i<10000000; ++i){
floatVec_A[i] += -floatVec_C[i]*floatvec_D[i];
}
for(size_t i=0; i<10000000; ++i){
floatVec_A[i] = sin(floatVec_A[i]);
}
//and so on
我希望这样做,因为这些独立的循环可以被外观整洁的函数替换,使代码可读性更好。对我来说,这会让生活变得更轻松,因为实际上我在内部使用的是avx内部函数,为了方便起见,上面的代码被简化了。
myMath::add_toFirst( floatVec_A, floatVec_B);
myMath::mul_toThird( floatVec_C, floatVec_D, resultVec);
myMath::add_toFirst( floatVec_A, resultVec);
myMath::sin(floatVec_A);
//and so on
一般来说
,在后一种情况下,表演会受到影响吗?是小的还是大的,是因为哪些因素?