dポイントプレゼントキャンペーン実施中!

今、フォートランで数値計算をしています。
プログラムを書き換えて走らせたところ、計算速度が非常に遅くなりました。
考えられるのは、IF文を多く使うようにしたこと、サブルーチンの呼び出し回数をふやしたなどが考えられるのですが。IF文はそれほど、計算負荷の大きいものなのでしょうか。
お願いいたします。

A 回答 (2件)

コンピュータによっても異なりますが、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
他にも、コンパイラによって最適化(効率化)のオプション等があると思いますので、確かめてみてください。
    • good
    • 0

if等の分岐は、並列処理、パイプライン処理による高速化をかなり妨害します。


また、分岐はキャッシュのミスヒットが起きる可能性があり、これによっても速度が低下します。
計算量が多い場合は極力減らさないと速度が出ません。

サブルーチン呼び出しも、比較的重い処理になりますし、
キャッシュへのミスヒットになる可能性がでてきます。

これは言語によらず同じです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!