|
ループ展開(ループてんかい、)は、プログラムのサイズを犠牲に実行速度を最適化する(時間と空間のトレードオフ)、と呼ばれる手法の1つである。ループアンローリング()とも呼ぶ。プログラマが手動で行うこともあるし、コンパイラが行うこともある。 ループ展開の目的は、毎回の繰り返しごとに発生する「ループの終了」条件のテストを減少させる(もしくはなくす)事によって、実行速度を向上させることである。ループは、ループ自体を制御するためのオーバーヘッドがなくなるように、独立した命令ブロックの連続に書き換えることができる。 == 利点 == ループのオーバーヘッドは、ポインタまたはインデックスをインクリメントして配列の次の要素を指すための命令群(ポインタ演算)と「ループ終了条件」のテストに由来する。最適化コンパイラなどで配列の個々の要素への参照のためのオフセットを事前に計算でき、それを直接機械語命令列にできるなら、実行時の余分な演算を省くことができる。 * ループ展開によってプログラムが長くなったとしても、それ以上に実質的な実行命令数が削減されれば、全体としては性能が強化される。 * 分岐ペナルティが最小化される。 * ループ内の各文が相互に依存していない場合(すなわち、ループのある周回の結果がその後の周回で必要とされない場合)、それらの文は並列計算できる可能性がある。 * コンパイル時にループ回数(配列要素数)が不明な場合でも、動的ループ展開を実装可能である(Duff's device)。 最適化コンパイラには自動的または要求に応じてループ展開できるものもある。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「ループ展開」の詳細全文を読む スポンサード リンク
|