Path: coconuts.jaist!wnoc-tyo-news!news.nc.u-tokyo.ac.jp!makino From: makino@chianti.c.u-tokyo.ac.jp (Jun Makino) Newsgroups: fj.lang.fortran,fj.sys.alpha Subject: Re: Fortran on PC-UNIX Date: 15 Dec 1996 15:14:28 GMT Organization: College of Arts and Sciences, Univ. of Tokyo Lines: 55 Distribution: fj Message-ID: References: <56a1uj$ni@news-n.cc.titech.ac.jp> <56mtqi$afj@kendm.ken.nm.fujitsu.co.jp> <582je0$1i68@lightning.asahi-net.or.jp> NNTP-Posting-Host: muscat.c.u-tokyo.ac.jp In-reply-to: kumon@flab.fujitsu.co.jp's message of Fri, 13 Dec 1996 12:29:13 GMT Xref: coconuts.jaist fj.lang.fortran:1127 fj.sys.alpha:68 >>>>> On Fri, 13 Dec 1996 12:29:13 GMT, kumon@flab.fujitsu.co.jp (Kouichi Kumon) said: > In article kumon@flab.fujitsu.co.jp (Kouichi Kumon) writes: >> ました。コンパイラが悪いと言われればその通りだと思いますが、すぐに直せ >> ると思います。 >> 時間がないので gcc 内部は確認していませんが。 > すぐに分かりました。 > -malign-double > このオプションを追加するだけで 8 byte 境界への配置が強制されます。 > これでで実際に高速になることが確認できます。 なるほど、そういうことだったのですね。 g77 ではどうかと思って調べたら、 -malign-double はあるのですが、 ただの変数とか配列はこれをつけても 8 バイト境界においてくれないよ うです。が、common block はおいてくれるようです。例えば以下のよう にした上で、-malign-double をつけると確かに test というcommon blockを8 バイト境界に持っていってくれて、ちゃんと速くなってくれま した。 #あ、Linux 上で gcc 2.7.2, g77 0.5.18 というものです。 牧野@東大駒場 subroutine vectadd(a,b,c,n) real * 8 a(n), b(n), c(n) integer n integer i do i = 1, n a(i) = b(i) + c(i) enddo end subroutine init(b,c,n) real * 8 b(n), c(n) integer n integer i do i = 1, n b(i) = 0 c(i) = 0 enddo end program vectortest real * 8 a(1000), b(1000), c(1000) common /test/a,b,c <- これをつける integer n integer i n = 1000 write(6,*)'n = ', n call init(b,c,n) do i = 1,100000 call vectadd(a,b,c,n) enddo end