アンロール

プログラムの実行速度を最適化する手法としてアンロールがある。

アンロールとは、ループの各反復を複数回分をまとめて展開することで、ループ展開(Loop Unrolling)とも呼べる。

アンロールはループ制御にかかるオーバヘッドを減少させるために使用される。

具体的にはループの終了条件のテストやジャンプ命令の回数を減らすことで実行速度を向上させる。

つぎのようなコードがあったとする。

for ( i = 0; i < 100; i++ )
{
  b[i] = a[i] + 1;
}

たとえば、4つに展開して、ループ回数を25回に減らすということである。

for ( i = 0; i < 25; i++ )
{
  b[ i + 0 ] = a[ i + 0 ] + 1;
  b[ i + 1 ] = a[ i + 1 ] + 1;
  b[ i + 2 ] = a[ i + 2 ] + 1;
  b[ i + 3 ] = a[ i + 3 ] + 1;
}