Wann, wenn überhaupt, ist das Abrollen der Schleife immer noch sinnvoll?

Ich habe versucht, einen extrem leistungskritischen Code (einen schnellen Sortieralgorithmus, der in einer Monte-Carlo-Simulation millionenfach aufgerufen wird) durch Schleifenentrollung zu optimieren. Hier ist die innere Schleife, die ich beschleunigen möchte:

// Search for elements to swap.
while(myArray[++index1] < pivot) {}
while(pivot < myArray[--index2]) {}

Ich habe versucht, mich zu etwas abzuwickeln:

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 andere Male ähnliche Erfahrungen gemacht, als ich versucht habe, eine Schleife abzurollen. Wann ist das Abrollen von Schleifen angesichts der Qualität von Verzweigungsvorhersagen auf moderner Hardware noch eine sinnvolle Optimierung?

Antworten auf die Frage(9)

Ihre Antwort auf die Frage