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