• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:同じEXE・同じファイルで解析結果が異なる)

同じEXE・同じファイルで解析結果が異なる

このQ&Aのポイント
  • PC1とPC2で同じEXE・同じファイルを使用して解析を行っていますが、解析結果が一致しません。
  • PC1はCore2Duo 2.83GHz、メモリ1Gであり、PC2はCorei5 2.67,2.66GHz、メモリ3Gであるため、PC2の方が高性能で解析が短時間で終わります。
  • PC1にはVisualStudio2005+VisualFortran11.066がインストールされており、PC1で作ったFortranのソースをEXEにしてPC2で動作させています。

質問者が選んだベストアンサー

  • ベストアンサー
  • nineexit
  • ベストアンサー率100% (8/8)
回答No.3

>PC1でコンパイルしたものをPC1とPC2で動作させようとしているので、 > コンパイルの違いはありません。 (私はエンドユーザでコンパイラの中身については良く分かっていないのですが、) コンパイラが環境に合わせて最適化を行うことがありますので、別のコンピュータでコンパイルしたものを実行すると、意図しない結果が出てくるかもしれません。 私も異なる環境で同じプログラムを動かすことがありますが、コンピュータごとにコンパイルして使っています。 >やっぱりそうなるんですよね、OSのバージョン、フレームワーク、その他環境など > システムを移植するときは開発したPC環境と運用するPC環境を > 完全に一致させなければいけないということですよね? 近似値を計算する数値計算であれば、完全に値が一致する必要はないと思いますので、 コンピュータの環境を揃える必要はないと思います。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • nineexit
  • ベストアンサー率100% (8/8)
回答No.2

異なるパソコンでコンパイルしたものを実行しているからではないでしょうか? PC2にgfortranなどのフリーのコンパイラを入れて結果を比較されてはどうでしょうか? それから,どれくらい答えが異なるのか分かりませんが,違う環境で計算すれば, 丸め誤差のため答えは完全に一致しません.

Gyustab
質問者

お礼

お返事ありがとうございます。 >異なるパソコンでコンパイルしたものを実行しているからではないでしょうか?  PC1でコンパイルしたものをPC1とPC2で動作させようとしているので、  コンパイルの違いはありません。 >PC2にgfortranなどのフリーのコンパイラを入れて結果を比較されてはどうでしょうか?  ご意見ありがとうございます、一度インストールして比較してみます。 >それから,どれくらい答えが異なるのか分かりませんが,違う環境で計算すれば,  丸め誤差のため答えは完全に一致しません.  やっぱりそうなるんですよね、OSのバージョン、フレームワーク、その他環境など  システムを移植するときは開発したPC環境と運用するPC環境を  完全に一致させなければいけないということですよね?

すると、全ての回答が全文表示されます。
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

そりゃ一致しないでしょ。 それはつまり質問にもある様にPC2の方が高性能だから。 ただ、言っている解析結果っていうのが 例えばPC1なら「2」という算出をするのにPC2だと「5」とか出るならちょっと問題あるね。 (勿論それは時間という変数を取り込まない事が前提) どちらであっても式からしたら演算が早くても答えが同じにならなければおかしいというのであるのならもしかしたらそのfortranが「分散処理」に対応しちゃってるのかもしれないね。 簡単に言うと「thread safe」になっていないって話 thread safe http://www.google.com/search?hl=ja&q=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%20%22thread%20safe%22 再起演算なんかが有るなら可能性が高いよ。 答えが得られる前に他の演算が進んでしまってヒドイ極端な話(変数や演算の分割を要約した式として)「6+2*3」みたいなのが12にならないってオチ。

Gyustab
質問者

お礼

ごめんなさい、書くところ間違えました お返事ありがとうございます。 根が深そうです、thread safeに関して調べてみます。 以下、よろしければ教えていただけませんか? >それはつまり質問にもある様にPC2の方が高性能だから。  OSはサービスパックも全く一緒なのですが、プロセッサの違いで同じEXEでも内部の計算は  一致するかは保障できないという事でしょうか?  そうなると実行環境とテスト環境はCPUやOSや開発環境をすべて一致させる必要がありそうですね。 >fortranが「分散処理」に対応しちゃってるのかもしれないね。  分散処理をしているかしていないかは、タスクマネージャーのパフォーマンスを表示した時に、  複数コアを使用して計算されていれば、分散処理をしてると言えるのでしょうか?  それともVisualStudioのオプション設定などに分散処理に関する項目があるのでしょうか? >再起演算なんかが有るなら可能性が高いよ。  一度解析した値をファイルに書き込み、それをまた読み込んで解析し、というような事を繰り返して  ある値に近づけるような解析をしているのですが、これは再起演算しているといえるのでしょうか

Gyustab
質問者

補足

お返事ありがとうございます。 根が深そうです、thread safeに関して調べてみます。 以下、よろしければ教えていただけませんか? >それはつまり質問にもある様にPC2の方が高性能だから。  OSはサービスパックも全く一緒なのですが、プロセッサの違いで同じEXEでも内部の計算は  一致するかは保障できないという事でしょうか?  そうなると実行環境とテスト環境はCPUやOSや開発環境をすべて一致させる必要がありそうですね。 >fortranが「分散処理」に対応しちゃってるのかもしれないね。  分散処理をしているかしていないかは、タスクマネージャーのパフォーマンスを表示した時に、  複数コアを使用して計算されていれば、分散処理をしてると言えるのでしょうか?  それともVisualStudioのオプション設定などに分散処理に関する項目があるのでしょうか? >再起演算なんかが有るなら可能性が高いよ。  一度解析した値をファイルに書き込み、それをまた読み込んで解析し、というような事を繰り返して  ある値に近づけるような解析をしているのですが、これは再起演算しているといえるのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A