LAM/MPI 環境での並列計算、 FreeBSD box だけ MPI universe には組み込めても並列計算には参加参加させられなかった。こいつだけ private address なので、ネットワーク周りでしくじっているのかと思っていたが、いろいろ試すと1プロセスだけなら MPI 経由で実行できるが、複数プロセスにすると FreeBSD box 上だけに限定しても死ぬことが判る。幸いにも core を遺していったので gdb で拾うと libc_r の中で死んでいる……。
libc_r っつーと thread ?って気が付いたが、ここで動かそうとしているプログラム、無茶苦茶 thread unsafe なのである。 POWER3 x 4 の AIX や某スパコンの要素並列ノードでコンパイラに thread 化したコードを吐かせると、確実に挙動が変わって実行できなくなる。
FreeBSD box 上では Linux 用の Intel Fortran を使っているんだが、オプティマイズかけると勝手に thread 化して、しかも MPI から並列実行させるとその辺の破綻が顕在化するってことだろうか。
案の定 g77 を使って作ってやるとちゃんと並列に計算している。
しかしな〜、 g77 の吐くコード遅いんだよな…。
これはもう極力使いたくないんだがさてどうしたものか…。
ifc でオプティマイズ外して調子見るかな〜
ちなみにこれが、同じ計算をさせた時の計算時間の比較。短い方が速い。 FreeBSD のいいコンパイラ欲しいな
MacOSX / PowerPC G4 1GHz g77 -O4 -fnoautomatic (gcc 3.4) total cpu time = 697.12 XL Fortran -O4 total cpu time = 456.01 AIX / POWER3 375MHz XL Fortran -O3 -qstrict -qarch=pwr3 total cpu time = 633.07 FreeBSD / Pentium III 800MHz g77 -O3 -funroll-loops -fnoautomatic (gcc 3.2.2) total cpu time = 706.52 Intel Fortran -O3 total cpu time = 640.77 PGI Fortran -O4 total cpu time = 514.98
[referer: [an error occurred while processing this directive]]