Я пытался оптимизировать какой-то чрезвычайно критичный для производительности код (алгоритм быстрой сортировки, который вызывается миллионы и миллионы раз в симуляции Монте-Карло) путем развертывания цикла. Вот внутренний цикл, который я пытаюсь ускорить:
// Search for elements to swap.
while(myArray[++index1] < pivot) {}
while(pivot < myArray[--index2]) {}
Я пробовал развернуть что-то вроде:
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
}
Это не имело абсолютно никакого значения, поэтому я вернул его в более читаемую форму. У меня был аналогичный опыт, когда я пробовал развернуть цикл. Учитывая качество предикторов ветвления на современном оборудовании, когда, если вообще, разворачивание цикла все еще является полезной оптимизацией?