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