Ich habe versucht, extrem leistungskritischen Code (einen schnellen Sortieralgorithmus, der in einer Monte-Carlo-Simulation millionenfach aufgerufen wird) durch Abrollen der Schleife zu optimieren. Hier ist die innere Schleife, die ich zu beschleunigen versuche:
// Search for elements to swap.
while(myArray[++index1] < pivot) {}
while(pivot < myArray[--index2]) {}
Ich habe versucht, mich zu etwas abzuwickeln wie:
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
}
Das machte absolut keinen Unterschied, also habe ich es wieder in die besser lesbare Form geändert. Ich habe ähnliche Erfahrungen gemacht, als ich versucht habe, die Schleife abzuwickeln. Wann, wenn überhaupt, ist das Abrollen von Schleifen angesichts der Qualität von Verzweigungsvorhersagen auf moderner Hardware immer noch eine nützliche Optimierung?