- 締切済み
フォートランプログラムの計算負荷について
今、フォートランで数値計算をしています。 プログラムを書き換えて走らせたところ、計算速度が非常に遅くなりました。 考えられるのは、IF文を多く使うようにしたこと、サブルーチンの呼び出し回数をふやしたなどが考えられるのですが。IF文はそれほど、計算負荷の大きいものなのでしょうか。 お願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- jeee
- ベストアンサー率52% (119/227)
コンピュータによっても異なりますが、IF文は負荷の大きい処理です。 負荷を軽減するためには、つぎのようなことを行います。 算術演算等の右辺と左辺のデータの型や大きさを同じにする。同じにしないと、通常、同じにするための命令が追加されます。 論理演算等の場合、条件の対象とするデータの特性にあわせ条件文を見直しします。 例えば、 条件Aが真のデータが20件 条件Bが真のデータが30件 条件Cが真のデータが50件 した場合、つぎの順で処理した場合 IF A ・・・ IF B ・・・ IF C ・・・ 実処理では 1番目のIFは100回 2番目のIFは80回 3番目のIFは50回 計230回条件処理を行います。 これをつぎのようにした場合 IF C ・・・ IF B ・・・ IF A ・・・ 実処理では 1番目のIFは100回 2番目のIFは50回 3番目のIFは20回 計170回となり、実処理が軽減されます。 また、 IF A OR B OR C とした場合、 OR条件では、最初に条件を満たしたら、つぎ以降条件を判断しないことがあります。(コンピュータやコンパイラで異なる場合あり) よって、つぎのように変更します。 IF C OR B OR A 他にも、コンパイラによって最適化(効率化)のオプション等があると思いますので、確かめてみてください。
- terra5
- ベストアンサー率34% (574/1662)
if等の分岐は、並列処理、パイプライン処理による高速化をかなり妨害します。 また、分岐はキャッシュのミスヒットが起きる可能性があり、これによっても速度が低下します。 計算量が多い場合は極力減らさないと速度が出ません。 サブルーチン呼び出しも、比較的重い処理になりますし、 キャッシュへのミスヒットになる可能性がでてきます。 これは言語によらず同じです。