バッチの考え方

Interactiveでプログラムを実行している状況では、プロセッサやメモリなどの資源を他の 利用者との間で競合するため、正確な実行時間を計測することが難しい。そのため、バッチ(batch) といって、ある時間、資源を占有する方法を用意する。

すでにInteractiveで使用したsample.c を使ってバッチ環境を使ってみる。

バッチの準備

  mpp% cd test
エディタmule を使ってファイルmyjobを作成。中身は次の通り。
---ここから
#!/bin/csh
ja                      -- 時間計測のため必要
cd $QSUB_WORKDIR        -- どのディレクトリにいてもジョブを実行させるための
                           おまじない
mpirun -np 4 a.out
ja -stc
--- ここまで

mpp% chmod 755 myjob    -- スクリプトmyjob を実行可能にするため
mpp% qstat -b           -- 現在使えるバッチクラス名とその中身が表示される。
                           コンテスト用のクラスはSC
--------------------------------
NQS 3.3.0.16 BATCH QUEUE SUMMARY
--------------------------------
QUEUE NAME              LIM TOT ENA STS QUE RUN  WAI HLD ARR EXI
----------------------- --- --- --- --- --- ---  --- --- --- ---
A                         6   0 yes  on   0   0    0   0   0   0 
B                         4   0 yes  on   0   0    0   0   0   0 
C                         3   0 yes  on   0   0    0   0   0   0 
D                         1   0 yes  on   0   0    0   0   0   0 
E                         1   0 yes off   0   0    0   0   0   0 
center_test               2   0 yes  on   0   0    0   0   0   0 
----------------------- --- --- --- --- --- ---  --- --- --- ---

mpp% qsub -q SC myjob   -- 実際にジョブを投入(submit)
nqs-181 qsub: INFO 
  Request <17872.mpp>: Submitted to queue  by .

mpp%  qstat -a          -- ジョブ実行確認
----------------------------------
IDENTIFIER  NAME   USER  LOCATION/QUEUE  JID            REQMEM REQTIM ST
----------- ------ ----- --------------- -------------  ------ ------ ---
24516.mpp   myjob  teamA supercon@mpp    0x78510000008      *  18000 R36
24517.mpp   hisjob teamB supercon@mpp    0x78510000018      *  18000 Qqr

mpp% ls
a.out*         myjob.e17872   myjob.o17872
myjob*         myjob.l17872   sample.c
3種類のファイルができる。e* はエラー情報。空ならば何も問題ない。o*は出力情報。 プログラムの実行で標準出力に出る内容もこのファイルに含まれる。

o*ファイルの中身の説明(一部省略)

コンテストにおいて実行時間は、CPU時間ではなく、経過時間を採用する。かつ、 経過時間はmpirunの時間を採用する。下記の例では、1.18秒である。
....
UX:news: INFO:  MPT_1.4 technical_document math_tool paralell_sample_code
Greetings from process 1!
Greetings from process 2!
Greetings from process 3!

Job Accounting - Command Report
===============================

    Command       Started   Elapsed    User CPU   Sys CPU    Blk I/O    Raw I/O   
     Name           At      Seconds    Seconds    Seconds   Wait Secs  Wait Secs  SBU's
===============  ========  ========== ========== ========== ========== ========== =======
# CFG   ON(   11) (    6)  11:54:43 07/27/2001  System:  IRIX64 mpp 6.5 10120733 IP27
ja               11:54:43        0.18       0.16       0.01       0.00       0.00    0.00
a.out            11:54:44        1.05       0.00       0.01       0.00       0.00    0.00
a.out            11:54:44        1.04       0.00       0.01       0.00       0.00    0.00
a.out            11:54:43        1.06       0.00       0.01       0.00       0.00    0.00
a.out            11:54:44        1.04       0.00       0.01       0.00       0.00    0.00
a.out            11:54:43        1.09       0.00       0.05       0.00       0.00    0.00
mpirun           11:54:43        1.18       0.00       0.03       0.00       0.00    0.00


Job CSA Accounting - Summary Report
====================================

Job Accounting File Name         : /tmp/.jacct35e5000000010a91
Operating System                 : IRIX64 mpp 6.5 10120733 IP27
User Name (ID)                   : hmatsuda (132)
Group Name (ID)                  : center (100)
Project Name (ID)                : kouhi (900)
Array Session ID                 : multiple Array Session IDs selected
Job Name (ID)                    : myjob (0x35e5000000010a91)
Report Starts                    : 07/27/01 11:54:43
Report Ends                      : 07/27/01 11:54:45
Elapsed Time                     :            2      Seconds
User CPU Time                    :            0.1727 Seconds
System CPU Time                  :            0.1247 Seconds
Maximum core memory used         :            2.3281 Mbytes
Maximum virtual memory used      :          213.5000 Mbytes
Characters Read                  :            0.0242 Mbytes
Characters Written               :            0.0009 Mbytes
Blocks Read                      :            0
Blocks Written                   :            0
Logical I/O Read Requests        :           74
Logical I/O Write Requests       :           54
Number of Commands               :            7
System Billing Units             :            0.0000
logout

バッチに関する注意

  • プロセスの考え方。たとえば、4並列であっても、並列数(4) + 親プロセス + shell プラスアルファで 合計6プロセス以上使うことになる。
  • 紳士協定 バッチを使った試験実行では、各人(各チームではない)につき1つだけとする。 即ち、一人が複数のログインセッションで試験実行を同時に複数行わない。
       [参考]瞬間最大PE数  
       イ)    (4並列 + 1edit + 1compile ) × (13チーム x 3名) = 234 
       ロ)    4並列 × 13チーム × 3名 = 156
       
  • バッチキュー(queue)仕様:
    • キューは1つだけ。
    • 全体で同時実行は2(状況に応じて1)。
    • 各チームごとの実行数は1。投入数は制限なし。
    • 最大並列実行数は32。