ループのアンロールによって、パフォーマンスが非常に重要なコード(モンテカルロシミュレーション内で何百万回も呼び出されるクイックソートアルゴリズム)を最適化しようとしています。これは私がスピードアップしようとしている内側のループです:
// 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
}
これはまったく違いがなかったので、より読みやすい形式に戻しました。ループのアンロールを試みたときも、同様の経験をしました。最新のハードウェアでの分岐予測子の品質を考えた場合、ループの展開が依然として最適な有用な最適化となるのはいつですか?