Когда, если вообще, будет ли развертывание цикла все еще полезным?

Я пытался оптимизировать некоторый чрезвычайно критичный для производительности код (алгоритм быстрой сортировки, который в миллионах и миллионах раз называют в симуляции Монте-Карло) путем развертывания цикла. Вот внутренний цикл, который я пытаюсь ускорить:

// 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
}

Это не имело никакого значения, поэтому я вернул его в более читаемую форму. У меня были подобные события в другой раз, когда я пытался развернуть петлю. Учитывая качество предикторов ветвления на современном оборудовании, когда развертывание цикла все еще является полезной оптимизацией?

Ответы на вопрос(9)

Ваш ответ на вопрос