FAQ
ここでは, これまでに遭遇した実行時の異常について覚書を示す.
mpiexec で実行できない(CX400 + ifort)
デフォルトでは ifort 用の MPI ライブラリ群にパスが通っていないため, "mpiexec" というコマンド名でジョブスクリプトを作成しジョブを投入すると, Fujitsu Fortran 用の mpiexec が起動してしまう.
[対処] スクリプトの mpiexec 起動前に以下を追加.
source /center/local/apl/cx/intel/impi/4.1.0.024/intel64/bin/mpivars.sh
これで ifort 用の MPI ライブラリのパスが通る.
あるいは, 以下のコマンドで環境変数が自動設定される.
intelset
計算時間が非常に遅い(CX400 + ifort)
MPI ライブラリが提供する環境変数を陽に指定しなかったため,
MPI プロセス数 = 計算ノード数 x 計算ノード数
という数の MPI プロセスが実行されていた.
[対処] CReSS のハイブリッド並列計算では, 基本的にノード数 = MPI プロセス数を想定している. つまり, 1 ノードにつき 1 MPI プロセスで実行される. そこで, 以下のような環境変数をジョブスクリプト内に陽に指定して, 1 ノードにつき 1 MPI プロセスしか実行されないようにする.
export I_MPI_PERHOST=1
各ノードでは OpenMP によるスレッド並列が行われている. (指定前では 1 ノードに全計算ノード数だけの MPI プロセスが実行され, それらがさらに OpenMP 並列を行っていたため計算が非常に遅くなっていたと思われる.)
計算時間が非常に遅い(CX400 + OpenMP)
ハイブリッド並列時に
OMP_NUM_THREADS > 7
として計算を実行すると, 計算時間が非常に遅くなる. これは, CX400 のハードウェア上の限界によるもの. 回避策はない.
OMP_NUM_THREADS <= 7
として設定すること.
計算開始後 1 ステップ目に到達しない(FX10 + frtpx)
計算開始後 1 ステップ目の計算に到達しない. エラー処理も起動せず, 処理が行われないまま, ellapse time の超過で計算が終了する.
[対処] OpenMP 処理で使用されるスタック領域のデフォルト値が小さいので, 陽に指定してスタック領域を拡張する.
export OMP_STACKSIZE=512000 # 単位は kB.
上記はジョブスクリプトにおいて OMP_NUM_THREADS の前後に挿入されるべきである. この問題のやっかいな点は, 通常の OMP_STACKSIZE 不足では Segmentation Fault で異常終了するところ, FX10 では異常終了せず処理だけが Hold されるということである. このため, ジョブスケジューリングシステム側では CPU 使用時間の超過という理由であたかも正常終了したかのように見える.
terrain が動かない.
- 標高データは CReSS 用に変換されていますか?
- 4 バイトのビッグエンディアンです.
- 標高データが計算領域より狭くないですか?
surface が動かない.
- SST データは CReSS 用に変換されていますか?
restart できない.
- iniopt は 2, 12 で設定していますか?
- restart ファイルは存在していますか?(resopt=1 でなければ作成されません)
- stime は restart 開始時刻を設定していますか?
- CReSS 2.3 と 3.3 で仕様が変更されたようで, 3.3 からは sfcast の時刻を見なくなった模様です(ウソかもしれません).