J'ai essayé d'optimiser certains extrêmement critiques des performances de code (un rapide algorithme de tri qui est appelé des millions et des millions de fois à l'intérieur d'une simulation de monte carlo) par le déroulement de la boucle. Voici la boucle interne, je suis en train d'accélérer:
// Search for elements to swap.
while(myArray[++index1] < pivot) {}
while(pivot < myArray[--index2]) {}
J'ai essayé de le dérouler à quelque chose comme:
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
}
De ce fait absolument aucune différence, donc je l'ai changé de retour à la forme plus lisible. J'ai eu des expériences similaires d'autres fois, j'ai essayé de déroulement de la boucle. Compte tenu de la qualité de la direction des prédicteurs sur le matériel moderne, quand, si jamais, le déroulement de la boucle est toujours utile d'optimisation?