Döngü açarak son derece performans açısından kritik bazı kodları (bir monte carlo simülasyonunda milyonlarca kez denilen hızlı sıralama algoritması) optimize etmeye çalışıyorum. İşte hızlandırmaya çalıştığım iç döngü:
// Search for elements to swap.
while(myArray[++index1] < pivot) {}
while(pivot < myArray[--index2]) {}
Şunun gibi bir şeye geçmeyi denedim:
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
}
Bu kesinlikle bir fark yaratmadı, ben de onu daha okunaklı hale getirdim. Döngü açmayı denediğim diğer zamanlarda da benzer deneyimler yaşadım. Modern donanımdaki branş tahmin edicilerinin kalitesi düşünüldüğünde, döngü açma işlemi ne zaman yararlı bir optimizasyon olur?