Я пытаюсь оптимизировать очень критически важный для производительности код (быстрый алгоритм сортировки, который называется миллионными и миллионными временами в моделировании monte carlo) путем циклического разворота. Здесь внутренний цикл, который я пытаюсь ускорить:
// 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
}
Это не имело никакого значения, поэтому я перевел его обратно в более удобочитаемую форму. У меня был аналогичный опыт в других случаях, когда я пытался разворачивать цикл. Учитывая качество отраслевых предсказателей на современном оборудовании, когда, если вообще когда-либо, развертка цикла все еще является полезной оптимизацией?