- ベストアンサー
MS-VisualStudio 2003と2005(マルチスレッドのみ)の環境の違い
MS-VisualStudio2003にて C,C++,FORTRAN混合言語ソースで開発したシミュレーションプログラム ・混合言語(CをメインにC++,FORTRAN9.0含む) ・ライブラリ指定(シングルスレッド、debugモード) を MS-VS2005にシフトしましたが計算結果の違いが結構出てくることで 悩んでいます(悩ましいことに、多少違ってくる) MS-VS2005環境は ・ライブラリがマルチスレッド環境のみ ・IntelFORTRANはVer9.10 の様ですが、弊方はこの環境を持っておらず、 環境設定などの詳細がわかないで困っています PC環境、プログラミングの問題、その他いろいろと考えられる 因子はありますが、弊方と同じような開発環境で悩んだ方で ・MS-VisualStudio開発環境(2003,2005) ・IntelFORTRAN環境 (9.0/9.1) 以上の大きな相違点など何かヒントでもあればありがたく 書き込みいただければ幸いです
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
「相手先が…」というのは、お客様ですか。。。 顧客が問題にするなら、問題ですね。 きちんとした理由をもって説明しないと。。でも、大変そうだ。 計算誤差が発生する簡単なサンプルプログラム(実プログラムから抜き出せたらもっといいですが)を作って、計算に違いが生じることを説明できたら、シミュレーション結果の違いは許容できる誤差の範囲であれば、納得してくれるようなクライアントなんでしょうかね?^^
その他の回答 (6)
- zwi
- ベストアンサー率56% (730/1282)
#2のzwiです。 VS2005からはシングルスレッドライブラリは無くなっているので選べません。 基本的にはマルチスレッドセーフになっているだけのライブラリだと思うのですが、VS2003のシングル時と浮動小数点誤差に関する差があるのかは確認したことが無いので分かりません。試しにVS2003をマルチスレッドライブラリで動かしてみるのも手かもしれません。 それとプログラムの最適化の基準は変わっていると思いますので、そのために演算の順位などが変わっていると誤差も変わるかもしれません。 >MS-VSのバージョンアップのたびに、こんな問題で悩んでいる方々がいるのではと思う今日この頃です 前からコンパイラのバージョン毎の浮動小数点ライブラリの誤差の問題はあった気がします。そのために精度の高い有料のサポートがある浮動小数点ライブラリが売られてたりしますので、そういう需要があるのだと思います。 最後に誤差の原因になる部分をDLLとかにパッケージとして封じ込められれば、提供する側としては安心できるかも知れませんので検討してみてください。
お礼
>試しにVS2003をマルチスレッドライブラリで動かしてみるのも手かもしれ >ません。 一応VS2003環境で試してみました 結果は問題ありませんでした (完全に隅から隅まで数値をチェックした訳ではありませんが) >最後に誤差の原因になる部分をDLLとかにパッケージとして封じ込められ>れば、提供する側としては安心できるかも知れませんので検討してみてくだ>さい。 参考にさせて頂きます 返答してくださった皆様 いろいろアドバイス有難う御座いました
- mikaemi
- ベストアンサー率50% (33/65)
ほんとに問題なのか、問題ですけど^^; でも、調べるということは、許容範囲を超えているのですよね^^
お礼
そうなんです 問題といえば問題なんですが(問題にしないと思えば問題にしない) MS-VS(WinOSもそうですが)のバージョンアップや DegitalFortran時代からInteFortranまでの変遷の度に 気持ち悪い思いをしてきました
- mikaemi
- ベストアンサー率50% (33/65)
ライブラリが、シングルスレッド→マルチスレッドに変わってますが、 このライブラリというのは、行列計算などをするものですか? で、マルチスレッドのライブラリの関数を呼ぶと自動的にスレッド生成して並行計算するみたいな。。。 それなら、シングルとマルチで、ライブラリ中の関数の計算順序が変わってる可能性が大きいので、計算結果に多少の違いが生じる可能性も大ですよね。 しょせん、近似計算なのだから、あまり細かい数値誤差は気になさらないほうがよろしいのでは? わたしは、自分で書いたシミュレーションプログラムなどがコンパイラをバージョンアップして、計算結果が違ってきても、許容誤差範囲なら何も調べませんでしたけど^^;
お礼
mikaemiさん 早速の回答・ご返事有難うございました(本当に早かったですね) プログラムはVS2003シングル開発ですから(元はWin3.1、DegitalFortran時代から継承なのです)マルチの必要なないのですが 相手先が、VS2005(マルチ)のみ環境らしく、この計算誤差の原因を どう説明しようかと考えております おっしゃる通り、私も計算結果は許容誤差範囲かなと考えておりますが この誤差がもとで、収束計算/最適化ループ計算の中で雪だるま的になる 場合もありまして、手を焼いている次第です VS2005の知識が無く申し訳ありませんが VS2005のライブラリはマルチの環境設定しかないのでしょうか? とするとMS-VSのバージョンアップのたびに、こんな問題で悩んでいる 方々がいるのではと思う今日この頃です
- mikaemi
- ベストアンサー率50% (33/65)
ん?ライブラリがデバッグモードってありますね。 もし、コンパイルもデバッグモードでしているなら、 最適化はかかってないかもしれないですね^^ zwi さんが指摘されているように、バイナリ→文字列変換の方法が、 バージョンアップで変わってる可能性はありますね。 Fortran なら unformatted で出力して比較するのがいいのかな。 unformatted のファイルの形式も変わってるという可能性は低いと思いますので^^
- zwi
- ベストアンサー率56% (730/1282)
>・MS-VisualStudio開発環境(2003,2005) >・IntelFORTRAN環境 (9.0/9.1) 私はこの組み合わせの経験はないのですが、ピンポイントな組み合わせなので都合よく同等の条件で困った方から返事がある可能性が低いと思われます。 そこでアドバイスです。まずやるべきことは、 ●FORTRAN側かVisualStudio側に原因があるのか原因を切り分けること。 どこで誤差が生まれたかを切り分けます。様々なポイントで、浮動小数点値をテキストファイルに書き出して、新しい方と古いほうで比較して違いが出てくる場所を見つけます。 表示誤差とかが気になるので出来れば浮動小数点値のバイナリーデータで比較することが望ましいです。 ●ソフト的に誤差が生まれる原因として考えられるのは、 1.表示時の誤差。表示しているプログラム側の丸め誤差。 2。提供されている浮動小数点ライブラリ関数の仕様変更。打ち切り誤差などが違う。 3.型変換時の変換誤差。正規化の丸め誤差に差がある? 辺りでしょうか。 参考↓ http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0
お礼
zwiさん 貴重な書き込み、アドバイス有難う御座いました 確かに楽して問題は解決しないですね 一番くさいのは、MS-VS環境(シングル/マルチ)や混合言語によるメモリの取り扱い 方による、浮動小数点の誤差かと睨んでいますが 今一度調べてみます
- mikaemi
- ベストアンサー率50% (33/65)
コンパイラがバージョンアップ(たとえば、Interl Fortran 9.0/9.1 → 9.10)したということですし、 コンパイラの最適化レベルが変わって、浮動小数点の計算結果に多少の違いが出てきたのではないのでしょうか? まったく最適化しないオプションをつけてコンパイルして、VS2003 と VS2005 でコンパイル・リンクした計算結果を比較してみるのはどうでしょう? デフォルトの丸めモードなども変わってる可能性があれば異なるでしょうけど。 ところで、シミュレーション結果が容認できないほど変わってしまったということなのでしょうか? あるいは、許容範囲の誤差ではあるが、プログラムを修正後の単体テストをするのに、 VS2003で出した計算結果とプログラム修正後の計算結果を字面上で単純に比較してチェックできないので、困っているということですか?
お礼
>顧客が問題にするなら、問題ですね。 >きちんとした理由をもって説明しないと 御察しいただき 有難う御座います >計算誤差が発生する簡単なサンプルプログラム(実プログラムから抜き出せ>たらもっといいですが)を作って、計算に違いが生じることを説明できた >ら、 その辺りで確認して、証拠を作るしかなさそうです 本日(8/25 17:10)は、別件でPCを離れますので 失礼致します いろいろ有難う御座いました