[Go to BBS]
All articles in a thread
Subjectad clusterのインテルマックでのコンパイルオプションについて
Article No520
Date: 2008/01/21(Mon) 17:57:59
ContributorY. Ohnishi & K. Oide
sad clusterのインテル・マックでのコンパイルオプションについて。

-O2でビルドすると、GetMAIN関数のところで以下のエラーが発生する。

LALR(1) parser:
sad1.exe(13416) malloc: *** vm_allocate(size=2147483648) failed (error code=3)
sad1.exe(13416) malloc: *** error: can't allocate region
sad1.exe(13416) malloc: *** set a breakpoint in szone_error to debug

その対処として、/users/hoge/oldsad/obj/i386-Darwin8/Makefileに以下のような行を追加し、hsrch.fのみ-O1でコンパイルする。

hsrch.o: $(@:.o=.f)
$(FC) -c -O1 -Wall -fno-second-underscore -fdollar-ok -fargument-alias -mpreferred-stack-boundary=4 -I/users/hoge/src/compile/oldsad/src -I/proj/epics/R314/R3149/base/include -I/proj/epics/R314/R3149/base/include/os/Darwin -I/SAD/arch/i386-Darwin8/include -I/usr/X11R6/include -o /users/hoge/src/compile/oldsad/obj/i386-Darwin8/$(@:.f=.o) /users/hoge/src/compile/oldsad/src/$(@:.o=.f)

(これは、iMacのLopard+gcc4.2.2では発生していない。)

わかる人、調べてください。

SubjectRe: ad clusterのインテルマックでのコンパイルオプションについて
Article No521
Date: 2008/01/21(Mon) 19:47:36
ContributorAkio Morita
URLhttp://acc-physics.kek.jp/SAD/SADrelease/distfiles/oldsad-1.0.10.2.2b.tar.gz
> sad clusterのインテル・マックでのコンパイルオプションについて。
>
> -O2でビルドすると、GetMAIN関数のところで以下のエラーが発生する。
>
> LALR(1) parser:
> sad1.exe(13416) malloc: *** vm_allocate(size=2147483648) failed (error code=3)
> sad1.exe(13416) malloc: *** error: can't allocate region
> sad1.exe(13416) malloc: *** set a breakpoint in szone_error to debug
>
> その対処として、/users/hoge/oldsad/obj/i386-Darwin8/Makefileに以下のような行を追加し、hsrch.fのみ-O1でコンパイルする。
>
> hsrch.o: $(@:.o=.f)
> $(FC) -c -O1 -Wall -fno-second-underscore -fdollar-ok -fargument-alias -mpreferred-stack-boundary=4 -I/users/hoge/src/compile/oldsad/src -I/proj/epics/R314/R3149/base/include -I/proj/epics/R314/R3149/base/include/os/Darwin -I/SAD/arch/i386-Darwin8/include -I/usr/X11R6/include -o /users/hoge/src/compile/oldsad/obj/i386-Darwin8/$(@:.f=.o) /users/hoge/src/compile/oldsad/src/$(@:.o=.f)
>
Makefileを修正するよりも、特定オブジェクトにオプションを付けるなら
SYS_FOPT_hsrch=-O1
が使えると思います(sad.confに入れるか、config/Darwin.specへ入れる)

ただ、デフォルトではGCCの場合、FOPTは "-g -O1"にしてあるのですが...

> (これは、iMacのLopard+gcc4.2.2では発生していない。)
>
と言うことですし、最適化オプションで挙動が変わるので単にコンパイラーの bugのような気がしますが?
amsad8で makeしているなら
gcc-4.2.0 (GCC) 4.2.0 20061109 (prerelease)
なはずです

SubjectRe^2: ad clusterのインテルマックでのコンパイルオプションについて
Article No522
Date: 2008/01/21(Mon) 20:53:51
ContributorAkio Morita
URLhttp://acc-physics.kek.jp/SAD/SADrelease/distfiles/oldsad-1.0.10.2.2b.tar.gz
hsrchz.oが妖しいなら、-O1/-O2での挙動の違いを調べれば良いはずなのですが
その辺の調査結果が上がっていないようなので調べました

amsad8のgcc-4.2.0では
hsrchz() @ src/hsrch.f内の hsrchz = mod(abs(isum), HTMAX)+1の結果が
-O1 と -O2で違います
例えば、 -O1 / -O2
$DUMMYLINE -> 10652 / -10650
(このときは、isum < 0でした)

さらに、
o 直前で、mod()を作用させる前の isumを writeすると挙動が変わる(-O2時)
o amsad9のgcc-4.2.1で makeすると -O2でも問題は出ません
ということなので、isum = INT_MINでは無いようなので、abs()が効いてないのか
大数に対するmod()が負になっているのか分りませんが、最適化オプションの
実装に関するコンパイラーのバグだと思われます

SubjectRe^3: ad clusterのインテルマックでのコンパイルオプションについて
Article No523
Date: 2008/01/23(Wed) 13:06:27
ContributorS. Yoshimoto
amsad8のgccを4.2.2へ上げました。