J'ai essayé d'optimiser un code extrêmement critique pour les performances (un algorithme de tri rapide appelé des millions et des millions de fois dans une simulation de Monte Carlo) en déroulant une boucle. Voici la boucle intérieure que j'essaie d'accélérer:
// Search for elements to swap.
while(myArray[++index1] < pivot) {}
while(pivot < myArray[--index2]) {}
J'ai essayé de 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
}
Cela n'a fait absolument aucune différence, alors je l'ai changé pour une forme plus lisible. J'ai eu des expériences similaires d'autres fois, j'ai essayé le déroulement de boucle. Compte tenu de la qualité des prédicteurs de branche sur le matériel moderne, quand, le cas échéant, le déroulement de boucle est-il encore une optimisation utile?