Я намагався оптимізувати надзвичайно важливий для продуктивності код (алгоритм швидкого сортування, який називається мільйонами і мільйонами разів у моделюванні Монте-Карло) шляхом розгортання циклу. Ось внутрішній цикл, який я намагаюся прискорити:
// 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
}
Це абсолютно не мало значення, тому я змінив його на більш читабельну форму. Я мав подібний досвід інший раз, коли пробував розгортання циклу. З огляду на якість прогнозування гілок на сучасному обладнанні, коли, якщо взагалі, розгортання циклу все ще є корисною оптимізацією?