アプリ版:「スタンプのみでお礼する」機能のリリースについて

長い題名ですいません。

PC1とPC2という2台のPCがあり、
同じEXE・同じファイルを使用して解析を行っているのですが、
解析結果が一致しないのです。

なぜこのような事をしているかというと、
PC1はCore2Duo 2.83GHz、メモリ1G
PC2はCorei5 2.67,2.66GHz、メモリ3G
であり、PC2の方が高性能で解析が短時間で終わるからです。

PC1にはVisualStudio2005+VisualFortran11.066 がインストールされており、
PC1で作ったFortranのソースをEXEにしてPC2で動作させています。

EXEの作り方はプロジェクトのクリーン後、プロジェクトのリビルドを行い、
実行ファイルがReleseフォルダにできるので、その中のEXEを実行しています。

原因をどのように調べたら良いかわかりません、教えてください。

A 回答 (3件)

>PC1でコンパイルしたものをPC1とPC2で動作させようとしているので、


> コンパイルの違いはありません。
(私はエンドユーザでコンパイラの中身については良く分かっていないのですが、)
コンパイラが環境に合わせて最適化を行うことがありますので、別のコンピュータでコンパイルしたものを実行すると、意図しない結果が出てくるかもしれません。
私も異なる環境で同じプログラムを動かすことがありますが、コンピュータごとにコンパイルして使っています。

>やっぱりそうなるんですよね、OSのバージョン、フレームワーク、その他環境など
> システムを移植するときは開発したPC環境と運用するPC環境を
> 完全に一致させなければいけないということですよね?
近似値を計算する数値計算であれば、完全に値が一致する必要はないと思いますので、
コンピュータの環境を揃える必要はないと思います。
    • good
    • 0

異なるパソコンでコンパイルしたものを実行しているからではないでしょうか?


PC2にgfortranなどのフリーのコンパイラを入れて結果を比較されてはどうでしょうか?

それから,どれくらい答えが異なるのか分かりませんが,違う環境で計算すれば,
丸め誤差のため答えは完全に一致しません.
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

>異なるパソコンでコンパイルしたものを実行しているからではないでしょうか?
 PC1でコンパイルしたものをPC1とPC2で動作させようとしているので、
 コンパイルの違いはありません。

>PC2にgfortranなどのフリーのコンパイラを入れて結果を比較されてはどうでしょうか?
 ご意見ありがとうございます、一度インストールして比較してみます。


>それから,どれくらい答えが異なるのか分かりませんが,違う環境で計算すれば,
 丸め誤差のため答えは完全に一致しません.

 やっぱりそうなるんですよね、OSのバージョン、フレームワーク、その他環境など
 システムを移植するときは開発したPC環境と運用するPC環境を
 完全に一致させなければいけないということですよね?

お礼日時:2011/11/13 14:16

そりゃ一致しないでしょ。


それはつまり質問にもある様にPC2の方が高性能だから。

ただ、言っている解析結果っていうのが
例えばPC1なら「2」という算出をするのにPC2だと「5」とか出るならちょっと問題あるね。
(勿論それは時間という変数を取り込まない事が前提)
どちらであっても式からしたら演算が早くても答えが同じにならなければおかしいというのであるのならもしかしたらそのfortranが「分散処理」に対応しちゃってるのかもしれないね。
簡単に言うと「thread safe」になっていないって話

thread safe
http://www.google.com/search?hl=ja&q=%E3%83%97%E …

再起演算なんかが有るなら可能性が高いよ。
答えが得られる前に他の演算が進んでしまってヒドイ極端な話(変数や演算の分割を要約した式として)「6+2*3」みたいなのが12にならないってオチ。

この回答への補足

お返事ありがとうございます。
根が深そうです、thread safeに関して調べてみます。

以下、よろしければ教えていただけませんか?


>それはつまり質問にもある様にPC2の方が高性能だから。
 OSはサービスパックも全く一緒なのですが、プロセッサの違いで同じEXEでも内部の計算は
 一致するかは保障できないという事でしょうか?

 そうなると実行環境とテスト環境はCPUやOSや開発環境をすべて一致させる必要がありそうですね。


>fortranが「分散処理」に対応しちゃってるのかもしれないね。
 分散処理をしているかしていないかは、タスクマネージャーのパフォーマンスを表示した時に、
 複数コアを使用して計算されていれば、分散処理をしてると言えるのでしょうか?

 それともVisualStudioのオプション設定などに分散処理に関する項目があるのでしょうか?


>再起演算なんかが有るなら可能性が高いよ。
 一度解析した値をファイルに書き込み、それをまた読み込んで解析し、というような事を繰り返して
 ある値に近づけるような解析をしているのですが、これは再起演算しているといえるのでしょうか?

補足日時:2011/11/01 16:08
    • good
    • 0
この回答へのお礼

ごめんなさい、書くところ間違えました

お返事ありがとうございます。
根が深そうです、thread safeに関して調べてみます。

以下、よろしければ教えていただけませんか?


>それはつまり質問にもある様にPC2の方が高性能だから。
 OSはサービスパックも全く一緒なのですが、プロセッサの違いで同じEXEでも内部の計算は
 一致するかは保障できないという事でしょうか?

 そうなると実行環境とテスト環境はCPUやOSや開発環境をすべて一致させる必要がありそうですね。


>fortranが「分散処理」に対応しちゃってるのかもしれないね。
 分散処理をしているかしていないかは、タスクマネージャーのパフォーマンスを表示した時に、
 複数コアを使用して計算されていれば、分散処理をしてると言えるのでしょうか?

 それともVisualStudioのオプション設定などに分散処理に関する項目があるのでしょうか?


>再起演算なんかが有るなら可能性が高いよ。
 一度解析した値をファイルに書き込み、それをまた読み込んで解析し、というような事を繰り返して
 ある値に近づけるような解析をしているのですが、これは再起演算しているといえるのでしょうか

お礼日時:2011/11/02 09:49

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