Conference Room SAD
[thread display] [new arrival display] [word search] [past log] [管理用]

Subject Re^3: bench2.sadの計算で微妙に異なる結果が?
Date: 2008/02/13(Wed) 21:04:32
ContributorAkio Morita

> 森田様
> 
> 何かとの比較と言うより、自宅の Power Mac G5 (MacOSX 10.5.1)でコンパイル(gcc-4.2.2とgcc-4.2.3で確認)した、SAD(Ver.1.0.10.2.2b2)による、bench2.sadの計算結果の一部が異常と判断されると言うべきでした。異常と考えるのは、以下の部分です。
> 
>    e=Emittance[SaveEMIT->True]
> Out[92]:= {(Stable->0),(Tunes->{.473400441522577,-.080201969698293,.014705021871626}),(EnergyLossU0->841899.7213531686),(RfVoltageVc->6669375.3984872019),(EquilibriumPosition->.011867380966062),(MomentumCompaction->-1.403804127233E-4),(OrbitDilation->0),(BucketHeight->.036967246823032),(HarmonicNumber->5120.0673440583533),(OrbitAtExit->{-1.438960475901E-8,1.4926806081698E-7,-1.149340649167E-9,-2.953604874793E-7,-1.628530284763E-5,-6.051358483954E-7}),(DampingRate->{-1.166678143986E-4,-6.868884666713E-5,-2.379273779416E-4}),(Emittances->{1.9488174206712E-8,1.710775906227E-12,2.4066694093961E-6}),(MomentumSpread->7.4485803830364E-4),(BunchLength->.003231044803423),(TuneShiftByRadiation->{-5.821719963095E-6,-1.550443095905E-5,6.8826826146108E-6})}
> 
> また、正常と考えられる計算(amsad5上のSAD Ver.1.0.10.2.2b3)では、次のようになります。お判りのように、この差異は加速器設計上深刻な事態に直結しています。
> 
> Out[92]:= {(Stable->1),(Tunes->{-.479421175902911,.080308293114144,-.013943132315795}),(EnergyLossU0->841899.7213531686),(RfVoltageVc->6669375.3984872019),(EquilibriumPosition->.011867380966062),(MomentumCompaction->1.2621060911709E-4),(OrbitDilation->0),(BucketHeight->.038987234772971),(HarmonicNumber->5120.0673440583533),(OrbitAtExit->{-1.438960472437E-8,1.49268060746E-7,-1.149340649096E-9,-2.953604874936E-7,-1.628530284763E-5,-6.051358484029E-7}),(DampingRate->{-1.202615376996E-4,-1.202642601542E-4,-2.404876932114E-4}),(Emittances->{1.8596069727676E-8,9.871436841692E-13,2.3689782900565E-6}),(MomentumSpread->7.3883322459107E-4),(BunchLength->.003206377846384),(TuneShiftByRadiation->{-1.415081816944E-7,9.9352081412077E-7,-7.905927367572E-9})}
> 
確かに、符号を含めてこれだけ違うのは FPU等の実装に起因する演算誤差ではあり得ませんね...

> 上記計算をしたamsad5のコンパイル環境を知らずまたSADのバージョンも僅かに違うので、自分のオフィスのMacPro(2×Intel Xeon Quad-core)で確認作業をしました。自宅で使用したと同じsad.conf(最初のメイルに添付したもの)を使い、同じソースSAD(Ver.1.0.10.2.2b2) をコンパイル (gcc-4.2.3)し、bench2.sadを計算。 この結果はamsad5と一致します。
> 
amsad5だと コンパイラは、今だと gcc-3.4.6かな?
コンパイル時のオプションは、以前は私が管理してましたが最近は私の手を離れているので分りません
# -O2ビルドで問題が出たことが有ったので、-O2を使っているようですが...
SADのソースに付属する script/BuildInfo.sadを実行すれば
コンパイル時に使用された主要なオプションが分かります

> 以前、自宅PowerMacでコンパイルしたSAD(ソースコードはamorita-branchに属す)は、ちゃんとamsadと同じ結果を返したと記憶するので、今回の違いの発生源として一番気になるのはコンパイル条件とインテル対IBMの周辺と思っています。調べ方など、助言をお願いします。

0. 実行環境の不良か、実行ファイル自体の不良かを切り分ける
OS/CPUの互換な環境間(自宅PowerMac G5 VS amsad5[PowerMac G5])で、
差異が認められるのであれば、問題の出た環境で生成した実行ファイルと
問題の出ない環境で生成した実行ファイルを交換して実行してみると、
環境側に原因があるか、生成された実行ファイルに原因があるか切り分けられます。
# 非常にまれでは有りますが、CPUのバグや CPU/Memoryを含んだ Hardware側の不良という
# ケースもないわけではありません
# 他にも、ストレージ系の障害でシステム付属の libraryが破損しているとか...
# 性の悪いものだと、負荷をかけると Memoryの特定 bitでエラーが発生など

A. 不良が実行環境に依存して発現する
1. 正常な環境からスタティックリンクな実行ファイルを持ってきて試験する
-やはり結果がおかしい
  ->Hardwareの不良が疑われる(CPUのバグ/MemoryやBusの不良など)
-スタティックリンクな実行ファイルは正常に動作する
  ->OS提供のライブラリ群に不良がある可能性大
     ファイルシステムとストレージ系をチェックすべし

B. 不良が実行ファイルに依存して発現する
1. コンパイルに使用した各種オプションを比較、修正して再構築
- 直った
  ->不適切な最適化(例えば、IEEE754を破る最適化など...)もしくはコンパイラの最適化バグと思われる
- コンパイル条件をそろえても不良が再現する
  ->コンパイル環境が不良の可能性大
     コンパイラツールチェーンの生成条件を確認・作り直してみる

まあ、ありがちな可能性を上から挙げると
- 不適切な最適化オプション
- 壊れたコンパイラツールチェーン(システム付属のものを使ってない場合)
- 最適化バグを踏んだ(一般に最適化レベルと下げると直る)
   注: 場合によっては、コンパイラのバグが最適化レベルを下げると発現する事例もあるので注意が必要

PS.
こうした問題を自動的に検出するには、きちんとした Regression Testを用意するべきなのかもしれませんね
(機能試験を行うコードと本来出力されるべき値のセットを用意して、実行系が
意図した動作を行っているかを自動的に判定するコードセット)
# だれか、書いてくれないかな?

bench2.sad自体は速度を測るベンチマークなので、Regression Test向きではありません
-演算結果に出力されるべき正しい値が用意されていない
-出力に実行時間といった環境依存の演算結果外情報を含んでいるので標準値との比較を自動化しにくい
-あくまでも、総合的な動作速度測定が目的なので、コンポーネント単位での演算結果の検証になっていない
-実際の運用で使われる Element Typeのサブセットしか使っていない
-Elementに与えるパラメータは、実装内部の条件分岐を網羅していない


- 関連一覧ツリー (Click ▼ to display all articles in a thread.)