[SCore-users-jp] Re: 計算ホストの台数によって計算誤差が変わる?

Keizo Hayashi k-hayashiatsogo-eng.co.jp
2002年 11月 25日 (月) 15:30:58 JST


林敬三@綜合技術コンサルタントです。
返信遅れまして申し訳ありません。

亀山様、さとう様、解答ありがとうございます。

亀山様よりのアドバイス:
> 
> その本の 82 ページのプログラムの説明を読めば分かると思いますが,
> このプログラムは配列の大きさで割り切れるプロセス数で実行することを想定
> しています.
> 
> 配列の大きさが 1024 (2 の 10 乗) ですので, 2 のべき乗以外のプロセス数で
> 実行した場合, 配列の中で計算を行わない部分が出て来てしまうため,
> 計算結果がおかしくなると思います.
> 
> ちなみに, size を 900 にしたら同じ計算回数になりました.
> 

確かにその通りでした。これは私の確認不足でした。
よく確認せずに質問してしまって申し訳ありませんでした。
誤差が出るかどうかはプログラム次第、という点、納得しました。

さとう様よりのアドバイス:
> 
> 後者のことはわかりかねねますが、ラプラス方程式はステップごとに
> 残差を計算して、それが適当な値になるまで繰り返すプログラムだと
> おもいます。その残差を計算するのにMPIReduceというMPIの関数を
> つかいますが、そのときに計算の順序が不定になるのは結構知られた
> 話で、計算の順序が違うと計算結果が若干違うためこのような結果になります。
> 
> 解としては、自分でReductionのルーチンをかく(つまり、全部集めて、
> きて、それを一定の順序で計算する)か、この程度のことは気にしない
> ということですね。
> 

あっ、なるほど!
確かに今までいろいろとプログラム試行してみて、計算順序がてんで
ばらばらになるのは知っていましたが、実際に誤差として現れるん
ですね、言われてみれば確かにその通りです。
なぜもっと早く気づかなかったのでしょう!

誤差としては小さく、当社の計算環境では問題ないレベルのため、
この誤差は気にしないこにとしますが、これからはプログラムの書き方も
少し注意するようにします。

それから現在、自動的に並列化してくれるコンパイラ(インテル製品など)
にも注目しているのですが、これは誤差への対処はどのようにしている
のでしょうか?
(すみません、これはまだこちらもよく調べずに質問を投げているため、
回答いただかなくてもけっこうですが、ご存じの方がおられましたら
教えてくださると助かります)

おかげさまで並列計算における誤差についてよくわかりました。
どうもありがとうございました。
=================================
(株)綜合技術コンサルタント IT管理室
林 敬三   k-hayashi at sogo-eng.co.jp
=================================



SCore-users-jp メーリングリストの案内