ループのアンローリング
ループ アンローリングは、プログラムの実行時間の最適化に役立つループ変換手法です。基本的に反復を削除または削減します。ループ展開では、ループ制御命令とループ テスト命令が不要になるため、プログラムの速度が向上します。 プログラム 1: CPP
// This program does not uses loop unrolling. #include int main ( void ) { for ( int i = 0 ; i < 5 ; i ++ ) printf ( 'Hello n ' ); //print hello 5 times return 0 ; }
プログラム 2: CPP // This program uses loop unrolling. #include int main ( void ) { // unrolled the for loop in program 1 printf ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); return 0 ; }
Output: Hello Hello Hello Hello Hello図: プログラム 2 は、プログラム 1 よりも効率的です。これは、プログラム 1 では、ループを繰り返すたびに i の値をチェックし、i の値をインクリメントする必要があるためです。そのため、このような小さなループや、固定回数の反復が含まれるループを完全に展開して、ループのオーバーヘッドを減らすことができます。
利点:
- プログラムの効率が向上します。
- ループのオーバーヘッドを削減します。
- ループ内のステートメントが相互に依存していない場合は、並列実行できます。
短所:
- プログラムコードのサイズが大きくなり、望ましくない場合があります。
- 一時変数を格納するために 1 回の反復でレジスタの使用量が増加する可能性があり、パフォーマンスが低下する可能性があります。
- 非常に小さく単純なコードは別として、分岐を含むアンロールされたループは再帰よりもさらに遅くなります。