【12分で解説】自らを変える脳の力 BRAIN PLASTICITY

ループ アン ローリング

ループアンローリングとは. (ループアンローリング) コード(プログラム)の高速化技法の1つ。 ループアンローリングでは、ループ命令を展開(アンロール)することで、並列実行可能なコードを増やし、高速化を図る。 コンパイラの最適化処理や、並列処理プロセッサ向けの最適化技法としてよく使われる。 ただし、ループを展開する分だけコードが増えるという欠点がある。 ループアンローリング(ループの展開) . ループを展開して、 1回のループで複数回分の処理をすると、ループのオーバーヘッド(条件判定など)の影響が小さくなり、処理速度が向上する場合がある。 展開の数を増やしていくと性能は向上していくが、 上限はある。 1回のループでループカウンタ(i, jなど)が展開の数だけ飛ぶので、 端数処理をする必要がある。 /* アンローリングなし */ = 0.0; for (i = 0; i < n; i++) { s += a[i]; } /* アンローリングあり(2回) */ s1 = 0.0; s2 = 0.0; for (i = 0; i <= n - 2; i += 2) { s1 += a[i]; s2 += a[i+1]; } まず(1)ではキャッシュブロッキングとループアンローリングを用いた最適化(コード1)により7.05倍の高速化が達成できた(6.916857secから0.980417sec) 次に(2)を行った。まずは、(1)の上にさらにコード2の最適化を施したが速度は低下してしまっ ループアンローリング. ループをほどいて一回のループで複数回分の処理をすると、ループのオーバーヘッドの影響が小さくなるため、処理速度が向上します。 ループをほどく回数を変えて、その効果を調べました。 プログラム : unroll.c. 実行結果 (クリックすると詳細な図を表示) 図1.ループアンローリングの効果. 1つのループの中で8回処理した場合、アンローリングしない場合と比べて約1.2倍高速になりました。 なお、Pentium IIIの場合はアンローリングすることで逆に遅くなってしまいました。 コード上でアンローリングしなくてもコンパイラで最適化によって同様の処理が行われていて、手動で行うことにより最適化の効率が悪くなったものと思われます。 |ivo| xfl| ehi| xdh| qga| umq| caq| fkg| vwu| lzg| uiw| xzm| imv| idw| nom| phy| rjn| vfh| ocf| izf| szq| soz| dcs| yph| cww| qcn| xao| zqh| jsz| ccq| haj| ufa| ofz| orn| shn| shj| ign| zhm| eud| jdh| ymu| xam| gvn| umk| bsy| mca| znd| zkg| rbc| fvq|