Tenho tentado otimizar alguns códigos extremamente críticos para o desempenho (um algoritmo de classificação rápida que está sendo chamado milhões e milhões de vezes dentro de uma simulação de monte carlo) por meio do desenrolamento de loop. Aqui está o loop interno que estou tentando acelerar:
// Search for elements to swap.
while(myArray[++index1] < pivot) {}
while(pivot < myArray[--index2]) {}
Tentei desenrolar para 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
}
Isso não fez absolutamente nenhuma diferença, então mudei de volta para a forma mais legível. Tive experiências semelhantes outras vezes em que tentei desenrolar loop. Dada a qualidade dos preditores de branch no hardware moderno, quando, se alguma vez, o desenrolamento de loop ainda é uma otimização útil?