2003年10月21日(火)

LAM/MPI with ifc on FreeBSD

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]]

lam-mpi
Excerpt: lam-mpi + ifc on FreeBSD で libc_r の中で死ぬ件だが、調べてみると libc_r をリンクしているのは並列実行されているバイナリじゃなくて lam 自身のバイナリだったりする。 で、問題を切り分けてみると lamfortran program g77g77ok ifcifcNG g77ifcNG ifcg77ok libc_r ...
Weblog: 夜行録
Tracked: 2003年11月07日 13:37
lam/mpi under FreeBSD
Excerpt: FreeBSD box もいよいよ nat の外に出てきて準備も整ったので lam/mpi で並列計算の環境構築。 かつて試みた時は、この FreeBSD box を universe に組み込もうとした時だけは並列計算ができなかった。 こんどは全員 global address で互いに参照しあえるので問題ないかと...
Weblog: 夜行録
Tracked: 2004年02月07日 00:24
あわせて読みたい