He estado tratando de optimizar un código extremadamente crítico para el rendimiento (un algoritmo de clasificación rápida que se llama millones y millones de veces dentro de una simulación de monte carlo) mediante el desenrollado de bucle. Aquí está el bucle interno que estoy tratando de acelerar:
// Search for elements to swap.
while(myArray[++index1] < pivot) {}
while(pivot < myArray[--index2]) {}
Intenté desenrollarlo a algo como:
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
}
Esto no hizo ninguna diferencia, así que lo cambié de nuevo a la forma más legible. He tenido experiencias similares otras veces que he intentado desenrollar bucles. Dada la calidad de los predictores de rama en el hardware moderno, ¿cuándo, si es que alguna vez, el desenrollado de bucles sigue siendo una optimización útil?