各プロセスプログラムの実行

事前準備

この項目では以下の事項が全て満たされていることを前提として話を進める.

  • CReSS のコンパイルは全て完了し, terrain.exe, surface.exe, gridata.exe, unite.exe, solver.exe が EXE ディレクトリに存在する.
  • 計算に必要な外部データが全て計算ディレクトリに存在している.
  • 計算に必要な CReSS の実行設定ファイル user.conf の内容が適切に設定されている.

以下, 任意の作業ディレクトリ work 内にて行う.

データの配置.

$ cd 作業用ディレクトリの場所
$ ln -s ~hoge/????? ./              # ????? = 計算に必要な初期値・境界値・地表面データファイル全て
$ mv ~hoge/????? ./                 # ????? = user.conf ファイルの名前
$ ln -s ~hoge/?????/EXE/*.exe ./    # コンパイルした *.exe ファイル全て

プリプロセスプログラムの実行 (?????? = user.conf ファイルの名前).

$ ./terrain.exe < ?????? > log.terrain
$ ./surface.exe < ?????? > log.surface
$ ./gridata.exe < ?????? > log.gridata

ジョブ投入スクリプトの編集

以下, 環境に合わせて設定する. "<-" という表記がある箇所が設定箇所.

  • CX + ifort の場合

    #!/bin/sh
    #PJM --rsc-list "rscunit=cx"
    #PJM --rsc-list "rscgrp=cx-middle"   <- ジョブグループ
    #PJM --rsc-list "vnode=32,vnode-core=24,elapse=24:00:00,vnode-mem=25600"  <- 使用ノード数, 使用スレッド数, 使用時間, 使用メモリ容量
    #PJM -P "vn-policy=abs-unpack"
    #PJM --no-stging
    #PJM --name "solve.sh"
    #PJM -j
    #PJM -S
    #PJM -X
    
    ########## Environment setting ######
    source /center/local/apl/cx/intel/impi/4.1.0.024/intel64/bin/mpivars.sh
    ########## Environment setting ######
    
    ############ configure ###############
    NODES=32     <- ノード数
    CORES=24     <- スレッド数
    PROCS=32     <- MPI プロセス数 (特に変な設定にしていないなら NODES と同じでよい.)
    cnf=user.conf.JPN2.5KM2012082512Z    <- user.conf の名前.
    log=log.solver.txt                   <- ログ出力ファイルの名前.
    slv=solver.exe                       <- solver.exe の名前.
    ############ configure ###############
    
    cd ${PJM_O_WORKDIR}
    
    export OMP_NUM_THREADS=$CORES
    export I_MPI_PERHOST=1       # <= これは 1 ノードに MPI 1 プロセスで指定する場合必須.
    export I_MPI_FABRICS=shm:ofa
    export I_MPI_PIN_DOMAIN=omp
    export I_MPI_PIN_CELL=core
    
    mpdboot -n $NODES -f ${PJM_O_NODEINF} -r /bin/pjrsh
    mpiexec -n $PROCS ./$slv < ./$cnf > ./$log
    
    mpdallexit
  • CX + frt の場合

    #!/bin/sh
    #PJM --rsc-list "rscunit=cx"
    #PJM --rsc-list "rscgrp=cx-middle"   <- ジョブグループ
    #PJM --rsc-list "vnode=32,vnode-core=24,elapse=24:00:00,vnode-mem=25600"  <- 使用ノード数, 使用スレッド数, 使用時間, 使用メモリ容量
    #PJM --name "solve.sh"
    #PJM -j
    #PJM -S
    
    ############ configure ###############
    NODES=32     <- ノード数
    CORES=24     <- スレッド数
    PROCS=32     <- MPI プロセス数 (特に変な設定にしていないなら NODES と同じでよい.)
    cnf=user.conf.JPN2.5KM2012082512Z    <- user.conf の名前.
    log=log.solver.txt                   <- ログ出力ファイルの名前.
    slv=solver.exe                       <- solver.exe の名前.
    ############ configure ###############
    
    cd ${PJM_O_WORKDIR}
    
    export OMP_NUM_THREADS=$CORES
    export MPI_NUM_PROCS=$NODES
    
    mpiexec -n $MPI_NUM_PROCS -stdin ./$cnf -of-proc ./$log ./$slv -Wl,-T -Wl,-Lu
  • FX + frtpx の場合

    #!/bin/sh
    #PJM --rsc-list "rscunit=fx"
    #PJM --rsc-list "rscgrp=fx-small"   <- ジョブグループ
    #PJM --rsc-list "node=4x3,elapse=24:00:00,node-mem=25600"  <- 使用ノード数, 使用スレッド数, 使用時間, 使用メモリ容量
    #PJM --name "solve.sh"
    #PJM -j
    #PJM -S
    
    ############ configure ###############
    NODES=12     <- ノード数
    CORES=16     <- スレッド数
    PROCS=12     <- MPI プロセス数 (特に変な設定にしていないなら NODES と同じでよい.)
    cnf=user.conf.JPN2.5KM2012082512Z    <- user.conf の名前.
    log=log.solver.txt                   <- ログ出力ファイルの名前.
    slv=solver.exe                       <- solver.exe の名前.
    ############ configure ###############
    
    cd ${PJM_O_WORKDIR}
    
    export OMP_NUM_THREADS=$CORES
    export MPI_NUM_PROCS=$NODES
    export OMP_STACKSIZE=512000    # <= これを指定しないと, omp 処理のときに止まる.
    
    mpiexec -n ${MPI_NUM_PROCS} -stdin ./$cnf -of-proc ./$log ./$slv -Wl,-Lu

ジョブの投入.

$ pjsub ?????      # ????? = ジョブ投入スクリプトファイルの名前.

ジョブの確認.

$ pjstat

ポストプロセスプログラムの実行 (?????? = user.conf ファイルの名前).

$ ./unite.exe < ?????? > log.terrain

以上で *united.bin というファイルが大量に出力されている. このファイルが CReSS の計算結果が格納されたものである.


1つ上に戻る

メインに戻る