ループのアンローリング

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