Является ли обычно быстрее (и почему) для одновременного выполнения всех инструкций во время итерации?Это кажется необходимым по причинам кэша.Или мы можем повторить несколько раз?
Стоит отметить, что count
велико (от 1000 до 1 000 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
В целом выполняет исполнениестрадать в последнем случае, мало или много, и из-за каких факторов?