Próbowałem zoptymalizować jakiś niezwykle krytyczny dla wydajności kod (algorytm szybkiego sortowania, który jest nazywany milionami razy w symulacji Monte Carlo) przez rozwijanie pętli. Oto wewnętrzna pętla, którą próbuję przyspieszyć:
// Search for elements to swap.
while(myArray[++index1] < pivot) {}
while(pivot < myArray[--index2]) {}
Próbowałem rozwinąć się do czegoś takiego:
while(true) {
if(myArray[++index1] < pivot) break;
if(myArray[++index1] < pivot) break;
// More unrolling
}
while(true) {
if(pivot < myArray[--index2]) break;
if(pivot < myArray[--index2]) break;
// More unrolling
}
Nie miało to absolutnie żadnego znaczenia, więc zmieniłem go z powrotem na bardziej czytelną formę. Miałem podobne doświadczenia, kiedy próbowałem rozwinąć pętlę. Biorąc pod uwagę jakość predyktorów gałęzi na nowoczesnym sprzęcie, czy rozwijanie pętli jest nadal użyteczną optymalizacją, jeśli w ogóle?