[Go to BBS]
All articles in a thread
Subjectbench2.sadの計算で微妙に異なる結果が?
Article No531
Date: 2008/02/13(Wed) 10:36:47
ContributorKAMADA Susumu
自宅のPowerMacG5でコンパイルしたSADで、bench2.sadの計算から、微妙に異なる結果が出ます。
以下に示しますが、特に目立つのは、Emittance関数の計算結果とダイナミックアパーチャサーベイのスコアです。
コンパイル時に使用したsad.confを示すので、エキスパートのご指摘をお願いします。

ちなみに、gcc-4.2.3とgcc-4.2.2との間で、計算結果に違いは生じません。
また、曜日がずれるのは自宅でもofficeでも同様です。

------------bench2.sadの計算結果----------------
[SusumuStudyG5]
*** Welcome to SAD Ver.1.0.10.2.2b2 built at 2008-02-02 21:17:39 +0900 ***
*** Today: 00:09:31 Friday 02/13/2008 ***
cpu time= 3.2171E-02(sec) dt= 32.171(msec) free area:: 1796
OFF LOG ECHO;READ 77 ; 23
cpu time= 3.2996E-02(sec) dt= 32.996(msec) free area:: 1796
cpu time= 3.3295E-02(sec) dt= 33.295(msec) free area:: 1795
*** SADScript Initialization: /usr/local/SAD/share/Packages/init.n ***
RFSW RADCOD RAD FLUC INTRA POL COD DAPER EMIOU CMPLO FOURI SMEAR
F F F T F F T F F F F T
Design orbit length = 76.1809243968600
NPARA=1;
EMFLG='M';
FLENG='ON';
FSUPP='OFF';
FINIT='OFF';
cell cal
Matched. ( 0.000 ) DP = 0.02000 DP0 = 0.00000 ExponentOfResidual = 2.0 OffMomentumWeight = 1.000
$$$ f AX ####### # -3.64E-16 $$$ f BX ####### # 6.981218 $$$ f NX ####### # 1.250000
$$$ f AY ####### # -4.66E-15 $$$ f BY ####### # 27.858289 $$$ f NY ####### # 1.250000
$$$ f LENG ####### # 76.180924
vquad=Element['VALUE','Q*'];nquad=Element['NAME','Q*'];
! setquad[name_,val_]:=Module[{},Element['VALUE',name]=val];
! MapThread[Element['VALUE',#1 ]=#2 &,{nquad,vquad}]
! Do[Element['VALUE',nquad[ii]]=vquad[ii],{ii,Length[nquad]}]
fit SD1.2 nx .25 ny .25
fit SF1.2 SF1.4 nx 0.5 ny 0.5
fit B.2 ex .183
fit ex -0.065
fit leng 76.1809 nx 1.25 ny 1.25
fit qf1.2 qf3.2 bx 10
fit qf1.2 qf2.2 bx 10
fit qd1 qd2.2 by 10
fit qd1 qd3.2 by 10
b 2*Pi/112 b l .86
l7 .52
free q* l0 l1 l2 l3 l4 l5 l6 fix qe2
CONVERGENCE=1e-28;
IF EMFLG=='H'
fix * free qe2 qd2 qd3 qf2 qf3
fit rej leng nx ny;fit sd1.2 rej * ;fit qf1.2 qf2.2 rej bx;fit qf1.2 qf3.2 rej bx;
fit qd1 qd2.2 rej by fit qd1 qd3.2 rej by;fit qd1 qd2.2 by 10;
fit ex -.30 fit b.2 ex 0.35
ENDIF
IF EMFLG=='L'
fix * free qe2 qd2 qd3 qf2 qf3
fit rej leng nx ny;fit sd1.2 rej * ;fit qf1.2 qf2.2 rej bx;fit qf1.2 qf3.2 rej bx;
fit qd1 qd2.2 rej by fit qd1 qd3.2 rej by;fit qd2.2 qd3.2 by 10;
fit ex 0.11 fit b.2 ex 0.05
ENDIF
! go
org nmark 0 0 0 360/112*2 0 0 ;
calc;
Residual = 6.5569E-12 DP = 0.02000 DP0 = 0.00000 ExponentOfResidual = 2.0 OffMomentumWeight = 1.000
QD1.1/QD2.2 BY 27.85829 1 27.858289 QD1.1/QD3.f BY 27.85829 1 27.858289 QF1.2/QF2.2 BX 26.11497 1 26.114975
QF1.2/QF3.2 BX 26.11497 1 26.114975 SD1.2 NX .25 1 .250000 SD1.2 NY .25 1 .250000
SF1.2/SF1.4 NX .5 1 .500000 SF1.2/SF1.4 NY .5 1 .500000 B.2 EX .183 1 .183000
$$$ AX ####### # 4.088E-16 $$$ BX ####### # 6.981218 $$$ NX 1.25 1 1.250000
$$$ AY ####### # -2.11E-15 $$$ BY ####### # 27.858289 $$$ NY 1.25 1 1.250000
$$$ EX -.065 1 -.065000 $$$ LENG 76.1809 1 76.180924
xxx=LINE['GEO','***'][1,1]/2/Tan[Pi*2/112*2]-LINE['GEO','QF3.2'][1,2];
yyy=LINE['GEO','***'][1,1]/2/Sin[Pi*2/112*2];
delr=(xxx+yyy)/2-yyy
Out[33]:= .233299216738089
Clear[xxx];Clear[yyy];
stop
tfree: detect null pointer
tfree: detect null pointer
FFS end: CPU time = 0.011 sec
RFSW RADCOD RAD FLUC INTRA POL COD DAPER EMIOU CMPLO FOURI SMEAR
F F F T F F T F F F F T
Design orbit length = 3016.30334011535
CONVERGENCE=1e-25;
fit rfmark2 bx @ by @ ax 0 ay 0
fit rfmark2.2 bx @ by @ ax 0 ay 0
fit sfeo.2 rfmark2.2 bxm 80 bym 80
fit nx nx0 ny ny0 free qr* qv*
! go
sdsq:=Apply[Plus,Element["K2","SD*"]^2];
coda="DP=0.024 fitp 24 go DP=0.02 fitp 20 go DP=0.016 fitp 16 go DP=0.02 fitp 20 go";
cell
MatchingAmplitude:={{-0.026,xa,xa/3},{0.026,xa,xa/3},{0.022,xa*1.2,0},{-0.022,xa*1.2,0},{-0.024,-xa*1.1,0},{0.024,-xa*1.1,0}};xa=8;
fix * rej total;
! fit rfmark2 bx @ 20 by @ 20 ax 0 20 ay 0 20
fit rfmark2.2 bx @ 20 by @ 20 ax 0 20 ay 0 20
fit nx nx0 20 ny ny0 20 ax 0 20 ay 0 20 bx .33 20 by by0 20
free s{fdc}*; nodifcod
Out[68]:= nodifcod
ExponentOfResidual=0.5;
DP=0.02
Out[69]:= .02
gym="p=12;rep 4 DP=p*0.001 fitp p go p=p+4 until; DP=0.02 fitp 20 go"
Out[70]:= "p=12;rep 4 DP=p*0.001 fitp p go p=p+4 until; DP=0.02 fitp 20 go"
sf* min 0 sf* max 2.5 sd* max 0 sd* min -6


!!!! Function Test !!!!!


FunctionTest=Class[{},{},{t0,a,b,c,d,e,f,g,C,a1,x,a2,b2,x2,
ndim=400},

Constructor[]:=(
C=Literal[Class][{},{},{aa},];
);

Fact[xx_]:=If[xx<=1,1,xx*Fact[xx-1]];

Fun[xx_,z__,xx_]:=xx+z;

Test[]:=(
t0=TimeUsed[];
SeedRandom[35];
Print[Timing[Do[c=C[];c@aa=1,{ndim}];"Instance"]];
a1=a=Table[Random[],{ndim},{ndim}];
b=Table[Join[Random[200],Table["b",{200}]],{ndim}];
Print[Timing[Do[D[Sin[x2]*x2^3,x2],{800}];"D"]];
Print[Timing[Do[
Fit[a[[,{1,2}]],a2*x2+b2,x2,{a2,0},{b2,0}],{300}];"Fit"]];
Print[Timing[Do[Sort[Flatten[a]],{2}];"Sort"]];
Print[Timing[Do[Plot[{Sin[x2],Cos[x2]},{x2,-Pi,Pi},
DisplayFunction->Identity],{6}];"Plot"]];
Print[Timing[Do[ListPlot[a[[,{1,2}]],
DisplayFunction->Identity],{400}];"ListPlot"]];
Print[Timing[Do[Spline[a[[,{1,2}]]],{700}];"Spline"]];
Print[Timing[Do[Join[a,b],{2200}];"Join"]];
Print[Timing[Do[Append[a,b],{8000}];"Append"]];
Print[Timing[Do[ToExpression["a=1+Pi"],{60000}];"ToExpression"]];
Print[Timing[Do[ToString/@[a,{-1}],{1}];"ToString"]];
Print[Timing[Do[Fun[1,2,3,1],{40000}];"Fun"]];
Print[Timing[Do[b/.{x_String:>x//"c"},{2}];"Replace"]];
Print[Timing[Do[Do[b[[,i]],{i,ndim}],{10}];"ThreadPart"]];
Print[Timing[
Do[Do[a1[[i,j]]=a1[[j,i]],{i,ndim},{j,i}],{2}];"Part"]];
Print[Timing[Do[Fact/@[a,{-1}],{1}];"Map"]];
Print[Timing[Do[Thread[a],{30}];"Thread Real List"]];
Print[Timing[Do[Thread[b],{15}];"Thread Non-Real List"]];
Print[Timing[Do[Fact[200],{500}];"Fact"]];
Print[Timing[Do[Flatten[b],{16}];"Flatten"]];

Print[" \n******* Function Test CPU used = ",tf=TimeUsed[]-t0," sec\n"]);

];
ft=FunctionTest[];
ft@Test[];
{.291047006845474,"Instance"}
{.131411969661713,"D"}
{.173669040203094,"Fit"}
{.211347997188568,"Sort"}
{.306164026260376,"Plot"}
{.210632085800171,"ListPlot"}
{.18622899055481,"Spline"}
{.110681056976318,"Join"}
{.122328042984009,"Append"}
{.172363042831421,"ToExpression"}
{.327561855316162,"ToString"}
{.052083015441895,"Fun"}
{.367103099822998,"Replace"}
{.198317050933838,"ThreadPart"}
{.686894178390503,"Part"}
{.123852968215942,"Map"}
{.095773220062256,"Thread Real List"}
{.127829074859619,"Thread Non-Real List"}
{.510708332061768,"Fact"}
{.106534957885742,"Flatten"}

******* Function Test CPU used = 4.57513315975666 sec
ft=.;
MemoryCheck[1]
Out[72]:= {4695003,6553600,880,0}


!!!! Optics Calculation Test !!!!!!!

t0=TimeUsed[]
Out[73]:= 4.796256065368652
Do[FFS["CALC"],{15}];
Print[" \n******* Optics Calculation Test: CPU time used = ",toc=TimeUsed[]-t0," sec\n"];

******* Optics Calculation Test: CPU time used = 4.862303733825684 sec


!!! Tracking Test !!!!!!!
t0=TimeUsed[]
Out[89]:= 9.658725738525391
RFSW RADCOD
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})}

DynamicApertureSurvey[{{0,50},{0,50},Table[i,{i,-16,16,4}]},60,Output->6];
Maximum number of particles =63
Range Xmin: 0.000 Xmax: 50.000
(Ymin: 0.000 Ymax: 50.000)
Zmin: -16.000 Zmax: 16.000
Display: 100 turns/character
NZ 0----!----1----!----2----!----3----!----4----!----5
-16.00 19 ************000000000000000000000000000000000000000
-12.00 22 ***************000000000000000000000000000000000000
-8.00 27 ********************0000000000000000000000000000000
-4.00 30 ***********************0000000000000000000000000000
0.00 35 ****************************00000000000000000000000
4.00 28 *********************000000000000000000000000000000
8.00 24 *****************0000000000000000000000000000000000
12.00 23 ****************00000000000000000000000000000000000
16.00 18 ***********0000000000000000000000000000000000000000
NZ 0----!----1----!----2----!----3----!----4----!----5
Score: 226
Print[" \n******* Tracking Test CPU used = ",tt=TimeUsed[]-t0," sec\n"];

******* Tracking Test CPU used = 6.275852203369141 sec


!!!! Matching Test !!!!!!!

t0=TimeUsed[]
Out[93]:= 15.934756278991699
CONVERGENCE=2e-4;
dp0=0.020;
dp=dp0;
FFS["fitp dp/0.001;go",6];
4 234 2.2671E-03 (NEWTON) 6.927
7 50 2.1257E-03 (NEWTON) 5.613
10 18 2.0078E-03 (NEWTON) 1.127
Matched. ( 1.9590E-03) DP = 0.02000 DP0 = 0.00000 ExponentOfResidual = 0.5 OffMomentumWeight = 1.000
DP -.020 -.018 -.016 -.014 -.012 -.010 -.008 -.006 .000 .006 .008 .010 .012 .014 .016 .018 .020
Res. .027 .027 .025 .024 .022 .020 .017 .015 .000 .017 .020 .021 .022 .023 .024 .025 .029
RFMARK2.1 AX ##### # -.115 -.119 -.122 -.122 -.118 -.108 -.093 -.073 1.E-7 .061 .081 .102 .128 .158 .192 .231 .275
RFMARK2.1 BX ##### # 3.434 3.542 3.647 3.744 3.835 3.918 3.997 4.078 4.362 4.659 4.736 4.803 4.865 4.932 5.012 5.116 5.256
RFMARK2.1 AY ##### # -.108 -.064 -.034 -.013 -3E-4 .007 .010 .010 -2E-7 -.003 .002 .011 .024 .042 .066 .097 .134
RFMARK2.1 BY ##### # 27.15 26.74 26.29 25.86 25.51 25.26 25.10 25.02 25.10 24.96 24.71 24.33 23.82 23.17 22.42 21.60 20.75
RFMARK2.2 AX 0 20 -.062 -.042 -.023 -.007 .005 .011 .013 .010 -3E-7 .008 .008 .006 6.E-4 -.006 -.012 -.015 -.013
RFMARK2.2 BX 4.362 20 4.212 4.215 4.232 4.262 4.300 4.339 4.371 4.389 4.362 4.360 4.377 4.391 4.393 4.375 4.333 4.266 4.175
RFMARK2.2 AY 0 20 -.091 -.106 -.114 -.115 -.110 -.100 -.085 -.066 2.E-8 .047 .052 .052 .047 .036 .022 .006 -.009
RFMARK2.2 BY 25.103 20 24.04 23.74 23.65 23.67 23.75 23.86 24.02 24.22 25.10 26.16 26.41 26.52 26.47 26.22 25.75 25.06 24.14
$$$ fAX 0 20 -.029 -.031 -.032 -.031 -.027 -.021 -.014 -.007 3.E-7 -.013 -.016 -.020 -.024 -.028 -.034 -.040 -.048
$$$ fBX .33 20 .340 .335 .331 .326 .323 .321 .321 .322 .330 .334 .336 .338 .341 .347 .354 .362 .372
$$$ fNX 46.52 20 46.53 46.53 46.53 46.52 46.52 46.52 46.52 46.52 46.52 46.52 46.52 46.52 46.53 46.53 46.54 46.54 46.54
$$$ fAY 0 20 .042 .038 .033 .025 .017 .008 .001 -.003 -3E-8 .028 .040 .052 .062 .068 .071 .067 .056
$$$ fBY .008 20 .008 .008 .008 .008 .008 .008 .008 .008 .008 .008 .009 .009 .009 .009 .009 .009 .009
$$$ fNY 46.08 20 46.10 46.09 46.09 46.09 46.08 46.08 46.08 46.08 46.08 46.08 46.08 46.08 46.08 46.08 46.07 46.07 46.07
$$$ fLENG ##### # 3016.3033
Print[" \n******* Matching Test: CPU time used = ",tm=TimeUsed[]-t0," sec\n"];

******* Matching Test: CPU time used = 4.345625877380371 sec

Print["\n *********** summary of the bench mark \n",
"\tFunction Test \t",tf,"\n\tOptics Test\t",toc,
"\n\tTracking Test\t",tt, "\n\tMatching Test\t",tm,
"\n\tOverall Score (smaller is faster): ",tf/42+(toc+tt+tm)/96];

*********** summary of the bench mark
Function Test 4.57513315975666
Optics Test4.862303733825684
Tracking Test6.275852203369141
Matching Test4.345625877380371
Overall Score (smaller is faster): .270221135800793
Abort

------------以下は、sad.conf--------------
# New Makefile -- Local Configuration Part Sample
#

## Compiler setting examples

# -- Interl C/Fortran Compiler 8.1 or later --
#COMPILER=Intel
##SYS_FOPT+=-vms -ccdefault list

# -- Interl C/Fortran Compiler 7.1 --
#COMPILER=Intel
#USE_IFC=7.1

# -- GNU Compiler Collection 4.2 or later --
COMPILER=GNU
CC=gcc-4.2.3
FC=gfortran-4.2.3
HAVE_F_LNBLNK=NO
SYS_DEPOBJ+=sim/unix_fortran_.o sim/fseek_Dummy_.o
FOPT=-O2
COPT=-O2

# -- Debugging source tree --
#FOPT=-g -O1
#COPT=-g -O1

# -- Debugging memory allocator --
#COPT+=-DDEBUG_MEMORY

# -- Debugging memory usege --
#COPT+=-DUSE_ELECTRICFENCE -DUSE_ELECTRICFENCE_FREECHECK
#EXE_LIBS+=-L/usr/local/lib -lefence

## SAD root directory
SAD_ROOT=/usr/local/SAD3

## Contrib source archive directory
#SOURCE_ARCHIVE_DIR=/usr/ports/distfiles

## X11 setup
#
USE_X11=YES
#X11_PREFIX=/usr/X11R6
##X11_INCDIR=$(X11_PREFIX)/include
##X11_LIBDIR=$(X11_PREFIX)/lib
##X11_LIBS=-lX11

## Tcl/Tk setup
#
USE_TCLTK=YES
TCLTK_VERSION=8.4.17
##BUILD_TCLTK=YES
##USE_TCLTK_SHARED_LIBRARY=YES
##TCLTK_GUI_BACKEND=X11|AQUA
##TCLTK_FONT_SYSTEM=Xlib|Xft
##TCLTK_VERSION=8.4.16|8.5b1|cvs
##TCLTK_PREFIX=$(SAD_ARCH_DIR)
##TCLTK_INCDIR=$(TCLTK_PREFIX)/include
##TCLTK_LIBDIR=$(TCLTK_PREFIX)/lib
##TCLTK_LIBS=-ltk$(TCLTK_FEATURE_VERSION) -ltcl$(TCLTK_FEATURE_VERSION)

## Python setup
#
#USE_PYTHON=YES
##BUILD_PYTHON=YES
##USE_PYTHON_THREAD=YES
##PYTHON_VERSION=2.4
##PYTHON_PATCH_LEVEL=1
##PYTHON_PREFIX=$(SAD_ARCH_DIR)
##PYTHON_INCDIR=$(PYTHON_PREFIX)/include/python$(PYTHON_VERSION)
##PYTHON_LIBDIR=$(PYTHON_PREFIX)/lib
##PYTHON_LIBS=-lpython$(PYTHON_VERSION)
##PYTHON_PATH=$(PYTHON_PREFIX)/lib/python$(PYTHON_VERSION)

## EPICS setup
#
#USE_EPICS=YES
#EPICS_INCDIR=$(EPICS_PREFIX)/include
#EPICS_LIBDIR=$(EPICS_PREFIX)/lib
#EPICS_LIBS=-lca -lDb -lCom

## for KEK-B EPICS setup
#USE_KEKB_EPICS=YES

# --- don't touch ---
ifeq ($(USE_KEKB_EPICS),YES)
KEKB_EPICS_ARCH=Unknown

ifeq ($(OS_NAME),Linux)
ifeq ($(CPU_ARCH),i386)
KEKB_EPICS_ARCH=Linux
endif
endif

ifeq ($(OS_NAME),OSF1)
ifeq ($(CPU_ARCH),Alpha)
KEKB_EPICS_ARCH=alpha
endif
endif

ifeq ($(OS_NAME),Darwin)
ifeq ($(CPU_ARCH),i386)
KEKB_EPICS_ARCH=darwin-x86
EPICS_PREFIX=/proj/epics/R314/R3149/base
EPICS_LIBS=-lca -ldbStaticHost -lCom
COPT+=-I$(EPICS_PREFIX)/include/os/Darwin
endif
ifeq ($(CPU_ARCH),PowerPC)
KEKB_EPICS_ARCH=darwin-ppc
EPICS_PREFIX=/proj/epics/R314/R3149/base
EPICS_LIBS=-lca -ldbStaticHost -lCom
COPT+=-I$(EPICS_PREFIX)/include/os/Darwin
endif
endif

ifeq ($(OS_NAME),HP-UX)
ifeq ($(CPU_ARCH),PA1.0)
KEKB_EPICS_ARCH=hp700
endif

ifeq ($(CPU_ARCH),PA2.0)
KEKB_EPICS_ARCH=hppa8k
endif
endif

ifeq ($(KEKB_EPICS_ARCH),Unknown)
$(error Unknown architecture)
else
USE_EPICS=YES
EPICS_PREFIX?=/proj/epics/R313/base
EPICS_LIBDIR=$(EPICS_PREFIX)/lib/$(KEKB_EPICS_ARCH)
endif
endif # USE_KEKB_EPICS==YES

# End of File

SubjectRe: bench2.sadの計算で微妙に異なる結果が?
Article No532
Date: 2008/02/13(Wed) 18:04:25
ContributorAkio Morita
> 自宅のPowerMacG5でコンパイルしたSADで、bench2.sadの計算から、微妙に異なる結果が出ます。
> 以下に示しますが、特に目立つのは、Emittance関数の計算結果とダイナミックアパーチャサーベイのスコアです。
> コンパイル時に使用したsad.confを示すので、エキスパートのご指摘をお願いします。
> 
微妙に異なる結果がでるとのことですが、なにと比較したかの条件が明示されてないので
誰も追試できないと思うのですが?
少なくとも、追試や解析には比較した2者の
o SADのソース
o コンパイル条件
o CPUアーキテクチャー
o OS
に関する情報は最低限必要かと思われます

仮に同一のソースを使っているとして、すぐに思い当たる要因としては...
o コンパイル条件やコンパイラが異なる場合
  -コードの最適化に伴う動作変化(言語仕様的に動作が実装依存又は未定義なコードが存在する場合)
   @最適化オプションにはIEEE754を破るものも存在します
  -コンパイラのデフォルトオプションの違い
  -コンパイラのバグ
o CPUアーキテクチャー/OSが異なる場合
  -浮動小数点演算の精度・丸め・内部表現が異なる
  -浮動小数点演算での例外処理が異なる
   @CPUが複数の精度・丸めをサポートする場合、OS・コンパイラ間で初期設定が異なる場合があるので要注意
   @最近のCPUでは、内部表現はIEEE754を採用しているものが多いのでメモリー上の表現形は統一されていますが
     CPU内で保持される演算途中の中間結果の表現がメモリー上と異なる実装も存在するので要注意
     (例: Intel i387 FPU 中間結果は拡張倍精度(80bit)で保持し、出力するまで単・倍精度に丸めない)
などが挙げられます

> また、曜日がずれるのは自宅でもofficeでも同様です。
> 
曜日がずれるとはどの様な意味でしょうか?
SADの起動メッセージで表示される曜日は、idate()で得られる{year,month,day}から計算しているはずですが
idate()からの戻り値とローカルタイムでの日付は整合していますか?
整合しない場合、タイムゾーン設定の不備か idate()の実装上の問題が考えられます
#同時に表示している時刻と日付は異なるサブルーチンを経由しているので、独立した問題です

SubjectRe^2: bench2.sadの計算で微妙に異なる結果が?
Article No533
Date: 2008/02/13(Wed) 20:12:22
ContributorKAMADA Susumu
森田様

何かとの比較と言うより、自宅の 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})}

上記計算をしたamsad5のコンパイル環境を知らずまたSADのバージョンも僅かに違うので、自分のオフィスのMacPro(2×Intel Xeon Quad-core)で確認作業をしました。自宅で使用したと同じsad.conf(最初のメイルに添付したもの)を使い、同じソースSAD(Ver.1.0.10.2.2b2) をコンパイル (gcc-4.2.3)し、bench2.sadを計算。 この結果はamsad5と一致します。

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

SubjectRe^3: bench2.sadの計算で微妙に異なる結果が?
Article No534
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に与えるパラメータは、実装内部の条件分岐を網羅していない

SubjectRe^3: bench2.sadの計算で微妙に異なる結果が?
Article No537
Date: 2008/02/16(Sat) 19:02:19
ContributorK. Oide
ちなみにIntel Mac, g95, -O2, SAD1.10.2.3bでも鎌田さんのamsad5での結果に近い値になっています。

e=Emittance[SaveEMIT->True]
Out[92]:= {(Stable->1),
(Tunes->{-.479421175902914,.080308293114159,-.013943132315795}),
(EnergyLossU0->841899.72135316825),(RfVoltageVc->6669375.3984872018),
(EquilibriumPosition->.011867380966062),
(MomentumCompaction->1.2621060911709E-4),(OrbitDilation->0),
(BucketHeight->.038987234772971),(HarmonicNumber->5120.0673440583523),
(OrbitAtExit->
{-1.438960484845E-8,1.4926806090778E-7,-1.149340648057E-9,-2.953604873296E-7,
...

SubjectRe^3: bench2.sadの計算で微妙に異なる結果が?
Article No538
Date: 2008/02/16(Sat) 19:30:29
ContributorK. Oide
さらに、PowerMac G5, g77, -O2, V1.0.10.2.3bでも同様です。

e=Emittance[SaveEMIT->True]
Out[92]:= {(Stable->1),
(Tunes->{-.479421175902913,.080308293114154,-.013943132315794}),
(EnergyLossU0->841899.7213531692),(RfVoltageVc->6669375.3984872019),
(EquilibriumPosition->.011867380966062),
(MomentumCompaction->1.2621060911708E-4),(OrbitDilation->0),
(BucketHeight->.038987234772972),(HarmonicNumber->5120.0673440583521),
(OrbitAtExit->
{-1.43896047765E-8,1.4926806075159E-7,-1.149340647902E-9,-2.953604876446E-7,
...

SubjectRe^3: bench2.sadの計算で微妙に異なる結果が?
Article No540
Date: 2008/02/16(Sat) 23:56:12
ContributorK. Oide
また、PowerPC G5, g95, -O2, V1.0.10.2.3bでも同様です。


e=Emittance[SaveEMIT->True]
Out[92]:= {(Stable->1),
(Tunes->{-.479421175902913,.080308293114154,-.013943132315794}),
(EnergyLossU0->841899.7213531692),(RfVoltageVc->6669375.3984872019),
(EquilibriumPosition->.011867380966062),
(MomentumCompaction->1.2621060911708E-4),(OrbitDilation->0),
(BucketHeight->.038987234772972),(HarmonicNumber->5120.0673440583521),
(OrbitAtExit->
{-1.43896047765E-8,1.4926806075159E-7,-1.149340647902E-9,-2.953604876446E-7,
...

SubjectRe^2: bench2.sadの計算で微妙に異なる結果が?
Article No547
Date: 2008/02/18(Mon) 01:06:25
ContributorKAMADA Susumu
この現象に関して、今までに検証された結果のまとめを示します。掲載順はほぼ検証結果報告の時系列に依ります。
また、#4~#9および#13はメイルによる情報交換によるもので、他はSAD掲示板に報告されたものです。

# ; platform ; source code ; compiler ;最適化オプション ; bench2結果 ; 検証者
#1 ; PowerMacG5(鎌田自宅) ; Ver.1.0.10.2.2b2 ; gcc-4.2.2, gcc-4.2.3 ; -O2 ;異常 ;鎌田
#2 ; PowerMacG5(amsad5);Ver.1.0.10.2.2b3; gcc-3.4.6 ? ; -O2 ; 正常 ;鎌田
#3 ; IntelMac(鎌田オフィス) ; Ver.1.0.10.2.2b2 ; gcc-4.2.3 ; -O2 ;正常 ; 鎌田
#4 ; IntelMac(鎌田オフィス);amorita-snapshot-1369; gcc-4.2.3 ; -O2 ; 正常 ; 鎌田
#5 ; PowerMac(吉本) ; ? ;gcc-4.2.3 ; -O2, -O3 ; 異常 ;吉本
#6 ; PowerMac(吉本) ;?: gcc-4.2.3;-O1 ; 正常;吉本
#7 ; PowerMacG5(鎌田自宅) ; Ver.1.0.10.2.2b2;gcc-4.2.3; -O1 ; 異常 ; 鎌田
#8 ; PowerMacG5(鎌田自宅) ; amorita-snapshot-1369; gcc-4.2.3 ; -O1 ; 正常 ; 鎌田
#9 ; FreeBSD/i386 ; amorita branch, Ver.1.0.10.2.2b2 ; gcc-4.2.3 ; -O3 ; 正常 ; 森田
#10 ; IntelMac ; Ver.1.10.2.3b ; g95 ; -O2 ; 正常 ; 生出
#11 ; PowerMac G5; Ver.1.0.10.2.3b ; g77; -O2 ;正常; 生出
#12 ; PowerMac G5 ; Ver.1.0.10.2.3b ;g95 ; -O2; 正常 ;生出
#13 ; PowerMacG5(鎌田自宅) ; amorita-snapshot-1369 ; gcc-4.2.3 ; -O2; 正常 ; 鎌田