[Go to BBS]
All articles in a thread
SubjectSAD on cygwin
Article No1015
Date: 2012/05/29(Tue) 21:54:32
ContributorKentaro Harada
  32bitのWin XP上に最新のcygwinを入れ、SADのmain trunkをコンパイルしようとしましたが、
やはりうまくいきませんでした。最後の部分をコピーします。何かアドバイスなどありましたら
お願いいたします。お手数おかけいたしまして申し訳ございません。sad.conf は最初のままで
全く編集していません。
 (関係ないですが、ちょっと前のcygwinはemacsがキー入力を完全に受け付けなくなるバグが
あったようで……1時間くらいはまりました。数日後にcygwin入れ直して解決……T_T)

Using built-in specs.
COLLECT_GCC=gfortran-4
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-cygwin/4.5.3/lto-wrapper.exe
Target: i686-pc-cygwin
コンフィグオプション: /gnu/gcc/releases/respins/4.5.3-3/gcc4-4.5.3-3/src/gcc-4.5.3/configure --srcdir=/gnu/gcc/releases/respins/4.5.3-3/gcc4-4.5.3-3/src/gcc-4.5.3 --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --datarootdir=/usr/share --docdir=/usr/share/doc/gcc4 -C --datadir=/usr/share --infodir=/usr/share/info --mandir=/usr/share/man -v --with-gmp=/usr --with-mpfr=/usr --enable-bootstrap --enable-version-specific-runtime-libs --libexecdir=/usr/lib --enable-static --enable-shared --enable-shared-libgcc --disable-__cxa_atexit --with-gnu-ld --with-gnu-as --with-dwarf2 --disable-sjlj-exceptions --enable-languages=ada,c,c++,fortran,java,lto,objc,obj-c++ --enable-graphite --enable-lto --enable-java-awt=gtk --disable-symvers --enable-libjava --program-suffix=-4 --enable-libgomp --enable-libssp --enable-libada --enable-threads=posix --with-arch=i686 --with-tune=generic --enable-libgcj-sublibs CC=gcc-4 CXX=g++-4 CC_FOR_TARGET=gcc-4 CXX_FOR_TARGET=g++-4 GNATMAKE_FOR_TARGET=gnatmake GNATBIND_FOR_TARGET=gnatbind --with-ecj-jar=/usr/share/java/ecj.jar
スレッドモデル: posix
gcc version 4.5.3 (GCC)
COMPILER_PATH=/usr/lib/gcc/i686-pc-cygwin/4.5.3/:/usr/lib/gcc/i686-pc-cygwin/4.5.3/:/usr/lib/gcc/i686-pc-cygwin/:/usr/lib/gcc/i686-pc-cygwin/4.5.3/:/usr/lib/gcc/i686-pc-cygwin/:/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/
LIBRARY_PATH=/usr/lib/gcc/i686-pc-cygwin/4.5.3/:/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-o' 'sad1.exe' '-g' '-O1' '-Wall' '-std=gnu' '-Wno-unused-dummy-argument' '-fno-second-underscore' '-fdollar-ok' '-fargument-alias' '-falign-functions=8' '-mpreferred-stack-boundary=4' '-I/home/kentaro/oldsad/src' '-I/home/kentaro/oldsad/arch/i386-CYGWIN5.1-1/include' '-I/home/kentaro/oldsad/obj/i386-CYGWIN5.1-1' '-L/home/kentaro/oldsad/arch/i386-CYGWIN5.1-1/lib' '-enable-auto-import' '-v' '-shared-libgcc' '-mtune=generic' '-march=i686'
/usr/lib/gcc/i686-pc-cygwin/4.5.3/collect2.exe --wrap _Znwj --wrap _Znaj --wrap _ZdlPv --wrap _ZdaPv --wrap _ZnwjRKSt9nothrow_t --wrap _ZnajRKSt9nothrow_t --wrap _ZdlPvRKSt9nothrow_t --wrap _ZdaPvRKSt9nothrow_t -Bdynamic --dll-search-prefix=cyg --large-address-aware --tsaware -o sad1.exe -enable-auto-import /usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../crt0.o /usr/lib/gcc/i686-pc-cygwin/4.5.3/crtbegin.o -L/home/kentaro/oldsad/arch/i386-CYGWIN5.1-1/lib -L/usr/lib/gcc/i686-pc-cygwin/4.5.3 -L/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../.. MAIN.o sim/unix_pointer_.o sim/unix_memory_.o sim/unix_memory8_.o sim/sad_api.o sim/sad_functbl.o sim/sad_signal.o sim/sad_xlib.o sim/sad_tcltk.o itopenbuf.o itfopenread_G77.o sim/dynl.o sim/dynl-dummy.o feature.o buildinfo.o buildinfo-db.o buildinfo_.o random_driver.o random_plugin_sad.o tfDefFuncs_.o dummyroutCA.o dummyrout.o libsad.a -rpath /usr/lib:/home/kentaro/oldsad/arch/i386-CYGWIN5.1-1/lib -ltai -lcrypt -lgfortran -lgcc_s -lgcc -lcygwin -luser32 -lkernel32 -ladvapi32 -lshell32 -lgcc_s -lgcc /usr/lib/gcc/i686-pc-cygwin/4.5.3/crtend.o
libsad.a(eigs33.o): In function `eigs33':
/home/kentaro/oldsad/src/eigs33.f:54: undefined reference to `_hypotl'
/home/kentaro/oldsad/src/eigs33.f:89: undefined reference to `_hypotl'
/home/kentaro/oldsad/src/eigs33.f:121: undefined reference to `_hypotl'
/home/kentaro/oldsad/src/eigs33.f:123: undefined reference to `_hypotl'
/home/kentaro/oldsad/src/eigs33.f:143: undefined reference to `_hypotl'
collect2: ld はステータス 1 で終了しました
Makefile:227: recipe for target `sad1.exe' failed
make[2]: *** [sad1.exe] Error 1
make[2]: ディレクトリ `/home/kentaro/oldsad/obj/i386-CYGWIN5.1-1' から出ます
Makefile:65: recipe for target `all' failed
make[1]: *** [all] Error 2
make[1]: ディレクトリ `/home/kentaro/oldsad' から出ます
Makefile:25: recipe for target `all' failed
make: *** [all] Error 2
212.380u 105.497s 4:13.50 125.3% 0+0k 0+0io 6717330pf+0w

SubjectRe: SAD on cygwin
Article No1016
Date: 2012/05/30(Wed) 11:52:12
ContributorAkio Morita
>   32bitのWin XP上に最新のcygwinを入れ、SADのmain trunkをコンパイルしようとしましたが、
> やはりうまくいきませんでした。最後の部分をコピーします。何かアドバイスなどありましたら
> お願いいたします。お手数おかけいたしまして申し訳ございません。sad.conf は最初のままで
> 全く編集していません。
>  (関係ないですが、ちょっと前のcygwinはemacsがキー入力を完全に受け付けなくなるバグが
> あったようで……1時間くらいはまりました。数日後にcygwin入れ直して解決……T_T)
>
(snip)
> libsad.a(eigs33.o): In function `eigs33':
> /home/kentaro/oldsad/src/eigs33.f:54: undefined reference to `_hypotl'
> /home/kentaro/oldsad/src/eigs33.f:89: undefined reference to `_hypotl'
> /home/kentaro/oldsad/src/eigs33.f:121: undefined reference to `_hypotl'
> /home/kentaro/oldsad/src/eigs33.f:123: undefined reference to `_hypotl'
> /home/kentaro/oldsad/src/eigs33.f:143: undefined reference to `_hypotl'
> collect2: ld はステータス 1 で終了しました
>
cygwinの libmに long double(拡張精度)の hypotが実装されていない
hypotlは、ISO C99規格に含まれる long double型に対するユークリッドノルム関数(hypot)です
hypot(x, y) == sqrt(x*x + y*y) (ただし、演算結果が有限な場合、計算中に overflow/underflowは発生しない)

SubjectRe^2: SAD on cygwin
Article No1017
Date: 2012/05/30(Wed) 12:31:47
ContributorKentaro Harada
ありがとうございます。
 
いつのバージョンかわかりませんが、古いeigs33.fをコピーしてコンパイルしたら
最後まで通りました。(走らせた計算結果が正しいかは別問題ですが。)
ありがとうございます。

subroutine eigs33(a,r,eig)
implicit none

integer itmax
parameter (itmax=8)
real*8 a,r,eig
dimension a(3,3),r(3,3),eig(3)
real*8 d,c,s,x11,x21,x31,x22,x33,x32,
$ r11,r21,r31,r12,r22,r32,r13,r23,r33,rr,
$ fact,dd,u,g,y33,y22,y11
integer*4 it

d=abs(dcmplx(a(2,1),a(3,1)))
if(d .ne. 0.d0)then
c=a(2,1)/d
s=a(3,1)/d
else
c=1.d0
s=0.d0
endif
x11=a(1,1)
x21=d
x31=0.d0
x22=a(2,2)*c**2+a(3,3)*s**2+2.d0*a(3,2)*c*s
x33=a(2,2)*s**2+a(3,3)*c**2-2.d0*a(3,2)*c*s
x32=a(3,2)*(c-s)*(c+s)+(a(3,3)-a(2,2))*c*s
r11=1.d0
r21=0.d0
r31=0.d0
r12=0.d0
r22=c
r32=s
r13=0.d0
r23=-s
r33=c
fact=1.d0
it=0
1 continue
it=it+1
c write(*,'(1x6f12.6)')x11,x21,x31,x22,x32,x33
dd=abs(x11)+abs(x22)
if(abs(x21)/fact+dd .eq. dd)then
eig(1)=x11
u=x22-x33
d=abs(dcmplx(u,2.d0*x32))
if(d .eq. 0.d0)then
eig(2)=x22
eig(3)=x33
else
c=sqrt(.5d0*(1.d0+abs(u)/d))
s=sign(sqrt(2.d0*x32**2/d/(d+abs(u))),u*x32)
eig(2)=.5d0*(x22+x33+sign(d,u))
eig(3)=.5d0*(x22+x33-sign(d,u))
rr=r12
r12= c*rr+s*r13
r13=-s*rr+c*r13
rr=r22
r22= c*rr+s*r23
r23=-s*rr+c*r23
rr=r32
r32= c*rr+s*r33
r33=-s*rr+c*r33
endif
go to 1000
endif
dd=abs(x22)+abs(x33)
if(abs(x32)/fact+dd .eq. dd)then
eig(3)=x33
u=x11-x22
d=abs(dcmplx(u,2.d0*x21))
if(d .eq. 0.d0)then
eig(1)=x11
eig(2)=x22
else
c=sqrt(.5d0*(1.d0+abs(u)/d))
s=sign(sqrt(2.d0*x21**2/d/(d+abs(u))),u*x21)
eig(1)=.5d0*(x11+x22+sign(d,u))
eig(2)=.5d0*(x11+x22-sign(d,u))
rr=r11
r11= c*rr+s*r12
r12=-s*rr+c*r12
rr=r21
r21= c*rr+s*r22
r22=-s*rr+c*r22
rr=r31
r31= c*rr+s*r32
r32=-s*rr+c*r32
endif
go to 1000
endif
u=x22-x11
d=abs(dcmplx(u,2.d0*x21))
g=x11-2.d0*x21**2/(u+sign(d,u))
d=abs(dcmplx(x32,x33-g))
c=(x33-g)/d
s=-x32/d
y22=x22
y33=x33
x22=y22*c**2+y33*s**2+2.d0*x32*c*s
x33=y22*s**2+y33*c**2-2.d0*x32*c*s
x32=x32*(c-s)*(c+s)-(y22-y33)*c*s
x31=-x21*s
x21= x21*c
rr=r12
r12= c*rr+s*r13
r13=-s*rr+c*r13
rr=r22
r22= c*rr+s*r23
r23=-s*rr+c*r23
rr=r32
r32= c*rr+s*r33
r33=-s*rr+c*r33
if(abs(x31)/fact+abs(x32) .ne. abs(x32))then
d=abs(dcmplx(x32,x31))
c=x32/d
s=-x31/d
y11=x11
y22=x22
x11=y11*c**2+y22*s**2+2.d0*x21*c*s
x22=y11*s**2+y22*c**2-2.d0*x21*c*s
x21=x21*(c-s)*(c+s)-(y11-y22)*c*s
x32=d
rr=r11
r11= c*rr+s*r12
r12=-s*rr+c*r12
rr=r21
r21= c*rr+s*r22
r22=-s*rr+c*r22
rr=r31
r31= c*rr+s*r32
r32=-s*rr+c*r32
endif
if(it .gt. itmax)then
fact=fact*4.d0
it=0
endif
go to 1
1000 r(1,1)=r11
r(2,1)=r21
r(3,1)=r31
r(1,2)=r12
r(2,2)=r22
r(3,2)=r32
r(1,3)=r13
r(2,3)=r23
r(3,3)=r33
return
end

real*8 function eigr33(r,u,ndim)
implicit none
include 'inc/MACMATH.inc'
integer*4 ndim
real*8 r(ndim,3),u(3),a,b,s2,u1,u2,u3,w,x1,x2,x3,c,s
s2=r(1,3)**2+r(2,3)**2
if(s2 .eq. 0.d0)then
if(r(3,3) .gt. 0.d0)then
u(1)=0.d0
u(2)=0.d0
u(3)=1.d0
eigr33=atan2(-r(1,2),r(1,1))
else
u1=r(1,2)
u2=1.d0-r(1,1)
w=sqrt(u1**2+u2**2)
u(1)=u1/w
u(2)=u2/w
u(3)=0.d0
eigr33=pi
endif
else
b=r(3,2)*r(1,3)-r(3,1)*r(2,3)
a=-(1.d0+r(1,1))*r(2,3)**2+(r(1,2)+r(2,1))*r(1,3)*r(2,3)
1 -(1.d0+r(2,2))*r(1,3)**2
u1=b*r(1,3)+a*r(2,3)
u2=b*r(2,3)-a*r(1,3)
u3=b*(1.d0+r(3,3))
w=sign(sqrt(u1**2+u2**2+u3**2),u3*r(3,3))
u1=u1/w
u2=u2/w
u3=u3/w
x1=r(1,1)*u2-r(1,2)*u1
x2=r(2,1)*u2-r(2,2)*u1
x3=r(3,1)*u2-r(3,2)*u1
c=x1*u2-x2*u1
s=(x1*u1+x2*u2)*u3-x3*(u1**2+u2**2)
eigr33=atan2(s,c)
u(1)=u1
u(2)=u2
u(3)=u3
endif
return
end

subroutine rot33(r,u,phi,ndim)
implicit none
integer*4 ndim
real*8 r(ndim,3),u(3),phi,w,u1,u2,u3,c,s,q
w=sqrt(u(1)**2+u(2)**2+u(3)**2)
u1=u(1)/w
u2=u(2)/w
u3=u(3)/w
c=cos(phi)
s=sin(phi)
if(c .ge. 0.d0)then
q=s**2/(1.d0+c)
else
q=1.d0-c
endif
c q=2.d0*sin(.5d0*phi)**2
r(1,1)=u1**2+(u2**2+u3**2)*c
r(2,1)=u1*u2*q+u3*s
r(3,1)=u1*u3*q-u2*s
r(2,2)=u2**2+(u3**2+u1**2)*c
r(3,2)=u2*u3*q+u1*s
r(1,2)=u2*u1*q-u3*s
r(3,3)=u3**2+(u1**2+u2**2)*c
r(1,3)=u3*u1*q+u2*s
r(2,3)=u3*u2*q-u1*s
return
end

SubjectRe^2: SAD on cygwin
Article No1018
Date: 2012/05/30(Wed) 12:39:38
ContributorKentaro Harada
サブルーチンの隅々まで、色々細かい改善が日々行われているんですね……と思いました。
(これはmatlabの関数名とかから推測すると、eigensystemで固有値計算のサブルーチンですよね?
重要と言えば重要ですね。結果が違うと、COD補正ができない。^_^;)

SubjectRe^2: SAD on cygwin
Article No1019
Date: 2012/05/30(Wed) 16:51:54
ContributorKentaro Harada
eigs33.fを古いものに戻すことで、コンパイルは通り、使えるように
なりました。ありがとうございました。
・USE X11 は コンパイル OK、動作 OK。
・USE TckTK は sad1.exe は作られるのですが、動作しませんでした。

SubjectRe^3: SAD on cygwin
Article No1020
Date: 2012/05/31(Thu) 14:47:02
ContributorAkio Morita
> eigs33.fを古いものに戻すことで、コンパイルは通り、使えるように
> なりました。ありがとうございました。
> ・USE X11 は コンパイル OK、動作 OK。
> ・USE TckTK は sad1.exe は作られるのですが、動作しませんでした。
>
今回のケースは、数値精度上の問題を解決するために ISO FORTRAN規格にある機能をつかってコードを
書き換えた結果、一部環境でコンパイル出来なくなった訳ですが、こうした問題を抱えた環境のサポートをどうすべきでしょう?

1. 標準規格未満の環境についてはサポートを打ちきる
* 個人的には、ISO FORTRAN 2003/ISO C99/ISO C++98未満の環境は切りたいところだが…

2. サポートすべき環境は、SAD側ですべて対応させる
* サポートすべき環境は、誰がどのように選択するか?
* サポートすべき環境は、誰が維持するのか?
SAD Clusterの運用上、主力の計算環境(MacOSX 10.5.X, FreeBSD/amd64 9.X)については維持しているが…

3. コードベースを branch/forkして維持する
* SADISTなら CVS repository上で branchを切れる
* ソースコードのライセンスを 修正BSDライセンスに切り替える話もあるので、forkも可能になる
保守を行う人が必要

SubjectRe^4: SAD on cygwin
Article No1021
Date: 2012/06/01(Fri) 15:05:51
ContributorKentaro Harada
きわめて個人的な偏見に基づきますが、
>SAD Clusterの運用上、主力の計算環境(MacOSX 10.5.X, FreeBSD/amd64 9.X)
は現在の様々な計算機環境の統計から考えると、極めて特殊な条件ではないで
しょうか。他国の加速器制御、例えば、インド、中国、ヨーロッパ、アメリカなど、
また、他国の研究者個人が気軽に試してみたいと思った時、一般的に使う OS は
やはり Linux か cygwin だろうと思いますので、(原田個人も PF も、そうです
し……)Linux と cygwin は是非対応して頂きたいところです。

  下手をすると、この先、Chrome OS とか Android とか言われるかも知れま
せんね。制御パネルにタブレット PC を採用したりして……

SubjectRe^5: SAD on cygwin
Article No1022
Date: 2012/06/01(Fri) 18:14:41
ContributorAkio Morita
> きわめて個人的な偏見に基づきますが、
> >SAD Clusterの運用上、主力の計算環境(MacOSX 10.5.X, FreeBSD/amd64 9.X)
> は現在の様々な計算機環境の統計から考えると、極めて特殊な条件ではないで
> しょうか。他国の加速器制御、例えば、インド、中国、ヨーロッパ、アメリカなど、
> また、他国の研究者個人が気軽に試してみたいと思った時、一般的に使う OS は
> やはり Linux か cygwin だろうと思いますので、(原田個人も PF も、そうです
> し……)Linux と cygwin は是非対応して頂きたいところです。
>
KEKBの特殊事情ですが、SAD自身が Project Drivenで開発維持されているので、そこで使われている環境で維持されている訳です
# 昔は、alsad系のLinux(RedHat Linux 9?)がありましたが、システムの維持を行う人がいなくなり廃止されました
# acsad系のTru64は残っていますが、コンパイラの更新が止まっているので維持は放棄されています

コミッターの原田さんがLinux & cygwinを主な利用環境としているなら、それ向けの改良・修正をどんどんコミットすれば良いと思います

私は、Linux & cygwinを常用していないのでそれらの環境で不具合が出ても感知出来ません
個人的には、Linuxサポートは MAYBE、cygwinに関しては OBSOLETEだと思っています

かつて移植を手がけた本人が言うのもなんですが、cygwinは、ISO C的にもSUS的にも互換度が低い環境なので、
cygwinで動かすためだけに標準的な言語機能の使用を制限すべきだというのは、個人的には反対です

>   下手をすると、この先、Chrome OS とか Android とか言われるかも知れま
> せんね。制御パネルにタブレット PC を採用したりして……
>
運用で必要になれば、移植を含めて何らかの対応が行われるでしょう