Ho cercato di ottimizzare un codice estremamente critico per le prestazioni (un algoritmo di ordinamento rapido che viene chiamato milioni e milioni di volte all'interno di una simulazione di Monte Carlo) eseguendo il looping. Ecco il ciclo interno che sto cercando di accelerare:
// Search for elements to swap.
while(myArray[++index1] < pivot) {}
while(pivot < myArray[--index2]) {}
Ho provato a srotolare qualcosa come:
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
}
Questo non ha fatto alcuna differenza, quindi l'ho cambiato di nuovo in una forma più leggibile. Ho avuto esperienze simili altre volte in cui ho provato lo srotolamento del loop. Data la qualità dei predittori di branch sull'hardware moderno, quando, se mai, lo srotolamento del loop è ancora un'ottimizzazione utile?