多重ループ

高速化プログラミング   
トップ  >  演算数と高速化  > 多重ループ

多重ループ

■ 概要

数値計算に関わっているなら、 2重ループやそれ以上の多重ループを使うことがよくあります。ループの回数が多ければ、多重ループの処理が大変重くなります。そのため、ループ内の計算が徹底的に軽くすることが非常に重要です。演算数を減らすほかの手法はもちろん実施したうえで、多重ループの場合はさらに確認すべきことがあります。

まず共通の計算はループ内にあるか。共通の計算があれば、できるだけループの外に持っていくことです。共通の計算がループ内にあると、同じ計算を繰り返しているということになるから、それだけ無駄な計算をしているわけです。このことは多重ループではなくても、通常の(1重)ループの場合も当てはまることです。

そして多重ループの順番も確認すべきです。共通の計算がループ内にあっても、ループの外に簡単に出せないときがあります。下のSample 2はその例です。このときは多重ループの順番を入れ替えてみることが一つの手です。場合によってはループの順番を入れ替えれば、共通の計算がループ外に出せることがあります。

管理者の経験では多重ループの扱いに失敗したことが一番プログラムが遅くなる原因の一つです。言い換えれば、プログラムを高速化したいなら、多重ループの部分を高速化することが最も効果的です。しかし演算数を減らすほかの手法と違って、多重ループの高速化は一番難しいです。ほかの手法の場合は一行、また数行だけ見ればよいですが、多重ループの高速化の場合はループ内の全行を見なければなりません。ループが長ければ、その分だけ多くの行を見渡して共通の計算を出せるか、またはループの順番を入れ替えても差し支えないかを判断しなければなりません。

多重ループの高速化は一番効果がいいと同時に一番難しいです。そして一番面白いと思ったのは管理者だけでしょうか。

■ サンプル

○ Sample 1: 共通項をループの外に

- C
- FORTRAN

○ Sample 2: ループの順番

- C
- FORTRAN

○ Sample 3: ダミー配列との併用

- C
- FORTRAN



はじめに

演算数を減らす

メモリジャンプを減らす

高性能のアルゴリズム

その他



4 8 2 5 6 6