誕生日にもらった意外なもの

フォートランによる数値計算についてお尋ねします。(技術系では今でもフォートランが現役なので)

何百万回も割り算をするアルゴリズムがあります。分母は定数で、分子がいっぱい変化します。としますと、割り算ではなく、分の1を計算して掛け算にしてもよいわけです。精度よりも高速化のほうが今はウェイトが高い状況です。
プログラムとしてそのように組んだ方が速いかも、と思いますが、一方でコンパイラが気を利かせて掛け算としてコンパイルしているかも知れません。もし、そうならばプログラムを書き換える意味がありません。
このあたりがコンパイラオプションなのかな?と思いますが、デフォルトでどのように計算しているか不明なのです。
以前の数値計算の本(PC-9801の頃)では時間を計って”ほら、割り算より掛け算が早いでしょ”ということを示すものなどがありました。そのような場合はコンパイラがそこまで気を利かせていないということになりますが、だいたいのところコンパイラは割り算をできるだけ掛け算に変更しようとしているのでしょうか。

PC上でのフォートラン(コンパックフォートランです。Microsoft,DECとオーナが変わってきてついに終わってしまったPC用のあのフォートランです。)を使っています。藁をも掴む思いで高速化を進めています。いかがでしょうか。

A 回答 (3件)

> 藁をも掴む思いで高速化を進めています。



と言うのなら、コンパイルオプションによって吐き出されるコードは異なるのですから当然計算時間も変わります。デフォルトではなく、CPUやキャッシュメモリなども考えてガリガリに最適化を掛けた時にどの程度まで時間が短縮されるのかを計測しながら、その状態でも時間がかかっていて人間がコードを書き直したらいいかもと思われるところを抽出したらよいのでは?

本気でやるんなら、小手先の所はなるべく機械に任せて、アルゴリズムの変更とか、反復計算の収束条件の検討とか、大きなところを人間がやるんでしょうね。
    • good
    • 0

ですね>#1. 特に Compaq FORTRAN なんかは持っている人も少ないと思うので, 結局「自分で試すのが最も早い」と思います.


まあ, 実行までさせなくてもアセンブリレベルまで落ちればそれなりに比較もできますが... やはり正確には実行させたいところ.
    • good
    • 0

私はプログラミングについて詳しくありませんが、コンパイルできる環境があるのでしたら二通りのソースを書いてそれぞれ試してみてはいかがでしょう。


おそらく同等の環境を持っている方は限られると思いますので、的確な回答が得られないことも考えられます。ご自身で試すことができるのでしたら、テスト用のプログラムを書いて演算に掛かる時間を測定することがベストだと思います。プログラム中でタイマーを動作させてプログラム終了まで掛かった時間を計測するのは難しくないと思いますので、一度試されてはいかがでしょう。
    • good
    • 0

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


おすすめ情報