ToDo:
AthlongMP2800+(2133MHz)と Opteron 242(1600MHz)の比較が結構おもしろい
CPU | Clock | OS | Compiler | Function | Optics | Tracking | Matching | Over All |
---|---|---|---|---|---|---|---|---|
Opteron 242 | 1.6GHz | FreeBSD/amd64 7.1R | GCC 4.4.0 20080905(-O3) | 3.600 | 5.088 | 6.031 | 4.613 | .2496 |
Opteron 242 | 1.6GHz | FreeBSD/amd64 7.1R | GCC 4.4.0 20080905(-O1) | 3.996 | 5.198 | 6.474 | 4.699 | .2657 |
AlthonMP2800+ | 2.13GHz | FreeBSD/i386 7.1R | GCC 4.4.0 20080905(-O3) | 4.789 | 5.289 | 4.970 | 4.585 | .2686 |
AlthonMP2800+ | 2.13GHz | FreeBSD/i386 7.1R | GCC 4.4.0 20080905(-O1) | 5.504 | 5.178 | 4.996 | 4.513 | .2733 |
Opteron 242 | 1.6GHz | FreeBSD/i386 7.1R | GCC 4.4.0 20080905(-O3) | 4.528 | 5.702 | 6.511 | 5.027 | .2874 |
Opteron 242 | 1.6GHz | FreeBSD/i386 7.1R | GCC 4.4.0 20080905(-O1) | 4.796 | 5.920 | 6.552 | 5.230 | .2986 |
Opteron 242 | 1.6GHz | FreeBSD/amd64 7.1R | GCC 4.4.0 20080905(-m32 -O3) | 4.616 | 6.038 | 7.082 | 5.322 | .3020 |
Opteron 242 | 1.6GHz | FreeBSD/amd64 7.1R | GCC 4.4.0 20080905(-m32 -O1) | 4.813 | 6.230 | 7.182 | 5.478 | .3114 |
要するに、AMD64なプロセッサでは、可能な限り64bitバイナリを走らせた方が 良いという当たり前の結論にたどり着く。 また、64bitモード内での32bitバイナリ互換機能を使うことが前提なら 最初から32bitモードで動作させた方が良い。
手元の i386環境だと起動1秒目でハングアップ Orz
Copyright (c) 1992-2009 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 7.1-STABLE #0: Wed Mar 4 16:01:29 JST 2009 amorita@morita-pc2.kek.jp:/var/obj/usr/SRC/RELENG_7/sys/RUMIYA WARNING: DIAGNOSTIC option enabled, expect reduced performance. panic: vm_page_startup: inconsistent page counts Uptime: 1s
アサートに引っかかるのは、vm_page_startup()@sys/vm/vm_page.cで、 最近の変更は
revision 1.357.2.6 date: 2009/02/26 15:59:22; author: jhb; state: Exp; lines: +129 -14 SVN rev 189075 on 2009-02-26 15:59:22Z by jhb MFC: Add support for "superpages" on amd64 and i386. This includes adding the superpage reservation system to the machine-independent VM system as well as changes to the pmap code for amd64 and i386 to support superpages. Reviewed by: alc Tested by: ps
revision 1.357.2.5 date: 2009/01/17 14:45:07; author: kib; state: Exp; lines: +5 -1 SVN rev 187364 on 2009-01-17 14:45:07Z by kib MFC r186719: Extend the struct vm_page wire_count to u_int to avoid the overflow of the counter, that may happen when too many sendfile(2) calls are being executed with this vnode. To keep the size of the struct vm_page and offsets of the fields accessed by out-of-tree modules, swap the types and locations of the wire_count and cow fields. Add safety checks to detect cow overflow and force fallback to the normal copy code for zero-copy sockets.
だが、2009-02-18に構築したカーネルは動いているので SVN rev 189075が怪しい?
2009-02-18にビルドした 7-stable/amd64なカーネルがshutdown時に 必ずパニックになる Orz
Waiting (max 60 seconds) for system process `vnlru' to stop...done Waiting (max 60 seconds) for system process `bufdaemon' to stop...done Waiting (max 60 seconds) for system process `syncer' to stop... Syncing disks, vnodes remaining...6 6 4 3 3 0 0 0 done All buffers synced. panic: insmntque() failed: error 16 cpuid = 0 Uptime: 2d2h30m33s Physical memory: 16374 MB Dumping 2057 MB: 2042 ....
一方、2009-03-04にビルドした 7-stable/amd64カーネルは デバイス認識に進んだ後、恐ろしい勢いでパニックメッセージを吐いて リブートしてしまう。 メッセージを確認するには、シリアルコンソールかビデオカメラが 必要な気がするぞ Orz
% grep ^CPU /var/run/dmesg.boot CPU: Quad-Core AMD Opteron(tm) Processor 2376 (2300.11-MHz K8-class CPU)
な環境で、NO_BLUETOOH, NO_LPR, NO_SENDMAIL, NO_BIND付き
BDECFLAGS= -W -Wall -ansi -pedantic -Wbad-function-cast -Wcast-align \\ -Wcast-qual -Wchar-subscripts -Winline \\ -Wmissing-prototypes -Wnested-externs -Wpointer-arith \\ -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings CFLAGS= -O2 -fno-strict-aliasing -pipe
で実行した結果
-------------------------------------------------------------- >>> World build completed on Tue Mar 10 20:47:45 JST 2009 -------------------------------------------------------------- 3561.490u 1076.600s 18:52.50 409.5% 6078+2008k 29714+7580io 4041pf+0w
実効並列度は、4が限界の模様
Y氏のニューマシン より遅いのは、最適化 or I/O回りが原因か?
/etc/make.confの最適化オプションと NO_*を外した状態で、 /usr/objをMFS化して再チャレンジ
% grep ^CPU /var/run/dmesg.boot CPU: Quad-Core AMD Opteron(tm) Processor 2376 (2300.11-MHz K8-class CPU)
-------------------------------------------------------------- >>> World build completed on Wed Mar 11 16:27:12 JST 2009 -------------------------------------------------------------- 3650.744u 990.505s 17:52.16 432.8% 6277+2052k 30871+7984io 4422pf+0w
あと残るのは、/usr/srcへの atime更新に伴うアクセスか?
まだ、全部コミットが終わっていないけど、
Revision 2834以降で、
SunStudio Express on OpenSolaris/x86な環境で
SADのコンパイルと bench2.sadの実行に
成功しました。
ただし、-stackvar(スタック上にサブルーチン変数を置く。 要するに、間接再帰での動作を保証する)とかを付けないと、 正しく動かない&最適化レベルを上げる(たとえば、-xO3)と 正しく動作しなくなるといった状況です。
実行速度は-xO1では、GCC 4.4.0で生成した バイナリよりも遅く、-xO3は実用にならないので あくまでも開発用の域を出ません。
やはり、SADのFortranコードが言語仕様で保証される範囲を 逸脱しているのが諸悪の根源か?
あと、*BSDやLinuxと浮動小数点トラップの扱いが異なるらしく bench2.sadの実行中やTkinter周りの動作時にFPEが 発生するので実運用では問題が出ると思います。
Option | bench2.sad | Notes |
-g -xO1 | OK | |
-g -xO2 | -- | 内部エラー *1 |
-g -xO2(-xO1 for tfshow.f) | SEGV at Fact[200] | Fact[200] -> Fact[170]で、OKに *2 |
-g -xO3 | SEGV at Fact[200] | Fact[200] -> Fact[170]で、OKに *2 |
*1 sunf95 -o tfshow.o -c -g -xO2 -xtypemap=integer:32,real:64,double:64 -xalias=dummy,overindex -stackvar -I/export/home/amorita/SVNwork/SAD/trunk/src -I/export/home/amorita/SVNwork/SAD/trunk/arch/i386-SunOS5/include -I/usr/X11R6/include -I/export/home/amorita/SVNwork/SAD/trunk/arch/i386-SunOS5/include -I/export/home/amorita/SVNwork/SAD/trunk/obj/i386-SunOS5 /export/home/amorita/SVNwork/SAD/trunk/src/tfshow.f sunf95: Warning: Option -xalias has no effect if the optimizer level is -xO2 or below assertion failed in function gather_proc_statistic() @ cginit.c:59 assert(ex_op_(eopcall) == EOPCALL)
*2 --- script/bench2.sad.orig 2009-03-12 14:57:39.565946294 +0900 +++ script/bench2.sad 2009-03-16 11:44:27.671423463 +0900 @@ -765,7 +765,7 @@ 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[Fact[170],{500}];"Fact"]]; Print[Timing[Do[Flatten[b],{16}];"Flatten"]]; Print[" \n******* Function Test CPU used = ",tf=TimeUsed[]-t0," sec\n"]);
Fact[200]で、Overflow Trapが発生した後の動作が怪しい。 おそらく、Floating Point Exceptionの扱いに問題がある。
ORG element_ gx_ gy_ gz_ [chi1_ chi2_ chi3_]
elementの(ビームラインに並べる前の)入り口を(gx,gy,gz)へ 載せた状態から、ビーム座標系と大域座標系を(chi1,chi2,chi3)で回転させる。
つまり、DIR=-1でビームラインに組み込まれているelementを 参照すると、エレメントを並べる前の入り口が基準になるので、 実質的にelementの出口の座標系を揃えることになるので要注意。
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記
_ Y氏 [最適化はデフォのままです。]