logo

ループのアンローリング

ループ アンローリングは、プログラムの実行時間の最適化に役立つループ変換手法です。基本的に反復を削除または削減します。ループ展開では、ループ制御命令とループ テスト命令が不要になるため、プログラムの速度が向上します。 プログラム 1: CPP
// 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 回の反復でレジスタの使用量が増加する可能性があり、パフォーマンスが低下する可能性があります。
  • 非常に小さく単純なコードは別として、分岐を含むアンロールされたループは再帰よりもさらに遅くなります。
参照: https://en.wikipedia.org/wiki/Loop_unrolling