EIC TOP

高速計算サーバ

  • 高速計算サーバはSGI UV2000の8ノードで構成されています。
  • 1ノードあたり、16ソケット(128コア)の1TBの共有メモリを搭載しており、大規模な共有メモリ計算、OpenMPプログラムの実行に適しています。
  • ここでは、ジョブクラスB~Fでバッチジョブを投入する方法を紹介します。

OpenMP並列計算

  • スクリプト例(ジョブクラスCで32並列のOpenMPプログラム(md)を実行)
    #!/bin/csh
    #$ -ac P=32
    #$ -ac n=32
    #$ -jc C
    #$ -cwd
    setenv OMP_NUM_THREADS 32
    dplace -x2 ./md
    並列数32を、-ac P,-ac nとOMP_NUM_THREADSの引数に指定します。(3か所)
    ジョブクラスBの場合は8、E、Fの場合は64を同様に3か所指定してください。
    ジョブの性能を安定させるためにプログラムの前にdplace -x2コマンドをつけてください。

    BC,DE,F
    #$ -ac P=8
    #$ -ac n=8
    #$ -jc B
    #$ -cwd
    #$ -ac P=32
    #$ -ac n=32
    #$ -jc C
    #$ -cwd
    #$ -ac P=64
    #$ -ac n=64
    #$ -jc E
    #$ -cwd

MPI並列計算

  • スクリプト例(ジョブクラスCで32並列のMPIプログラム(xhpl)を実行)
    #!/bin/csh
    #$ -ac P=32
    #$ -ac n=32
    #$ -jc C
    #$ -cwd
    mpiexec_mpt -np 32 dplace -s1 ./xhpl
    EICシステムではMPIジョブの実行の際、mpiexec_mptコマンドを使用してください。
    並列数32を、-ac P,-ac nとmpiexec_mptの引数に指定します。(3か所)
    ジョブクラスBの場合は8、E、Fの場合は64を同様に3か所指定してください。
    ジョブの性能を安定させるためにプログラムの前にdplace -s1コマンドをつけてください。

    BC,DE,F
    #$ -ac P=8
    #$ -ac n=8
    #$ -jc B
    #$ -cwd
    #$ -ac P=32
    #$ -ac n=32
    #$ -jc C
    #$ -cwd
    #$ -ac P=64
    #$ -ac n=64
    #$ -jc E
    #$ -cwd

MPI/OpenMPハイブリッド計算

MPIプロセスごとにOpenMPのスレッドを起動する計算です。
同一MPIプロセス中のOpenMPのスレッドが同一CPU内のローカルメモリを使用できるように、OpenMPのスレッド数は2,4,8のいずれかを推奨します。

MPI4プロセス×OpenMP8スレッドの場合
 0          1          2          3    mpiプロセス番号
[0,0,0,0,0,0,0,0] [1,1,1,1,1,1,1,1] [2,2,2,2,2,2,2,2][3,3,3,3,3,3,3,3] OpenMPスレッドが所属するMPIプロセス番号
[ ]はCPUソケット

  • スクリプト例(ジョブクラスEで8並列x8スレッドのMPIプログラム(a.out)を実行)
    #!/bin/csh
    #$ -ac P=64
    #$ -ac n=64
    #$ -jc E
    #$ -cwd
    setenv OMP_NUM_THREADS 8
    mpiexec_mpt -np 8 omplace ./a.out
    合計使用コア数の64を-ac P,-ac nの2か所に指定し、mpiexec_mpt、OMP_NUM_THREADSの引数にそれぞれ8を指定します。
  • スクリプト例(ジョブクラスCで8並列x4スレッドのMPIプログラム(a.out)を実行)
    #!/bin/csh
    #$ -ac P=32
    #$ -ac n=32
    #$ -jc C
    #$ -cwd
    setenv OMP_NUM_THREADS 4
    mpiexec_mpt -np 8 omplace ./a.out
    合計使用コア数の32を-ac P,-ac nの2か所に指定し、mpiexec_mptにMPIプロセス数に8、OMP_NUM_THREADS にスレッド数4を指定します。
    dplaceの代わりに、omplace コマンドをつけてください。

BC,DE,F
#$ -ac P=8
#$ -ac n=8
#$ -jc B
#$ -cwd
setenv OMP_NUM_THREADS 2
mpiexec_mpt -np 4 omplace ./a.out
もしくは
setenv OMP_NUM_THREADS 4
mpiexec_mpt -np 2 omplace ./a.out
#$ -ac P=32
#$ -ac n=32
#$ -jc C
#$ -cwd
setenv OMP_NUM_THREADS 8
mpiexec_mpt -np 4 omplace ./a.out
もしくは
setenv OMP_NUM_THREADS 4
mpiexec_mpt -np 8 omplace ./a.out
#$ -ac P=64
#$ -ac n=64
#$ -jc E
#$ -cwd
setenv OMP_NUM_THREADS 8
mpiexec_mpt -np 8 omplace ./a.out
もしくは
setenv OMP_NUM_THREADS 4
mpiexec_mpt -np 16 omplace ./a.out

OpenMPコア飛ばし

  • 64コアを占有して、32コアを使用する例です。
  • #$ -ac P=には実際に使用するコア数(ここでは32)、#$ -ac n=には占有するコア数(ここでは64)を指定します。
  • コア飛ばしではomplaceというコマンドを使用します。-ntの引数に、#$ -ac P=と同じ値(ここでは32)を指定してください。
  • "-c 0-:s=2"は各コアを1つ飛ばして、0,2,4,6....と使用することを意味します。
  • omplaceを使う場合は、OMP_NUM_THREADSは不要です。(つけていても問題はありません。-ntの値が優先されます。)
    #!/bin/csh
    #$ -ac P=32
    #$ -ac n=64
    #$ -jc E
    #$ -cwd
    omplace -nt 32 -c 0-:st=2 ./md

MPIコア飛ばし

  • 64コアを占有して、32コアを使用する例です。
  • #$ -ac P=には実際に使用するコア数(ここでは32)、#$ -ac n=には占有するコア数(ここでは64)を指定します。
  • mpiexec_mptの引数-npには#$ -ac P=と同じ値(ここでは32)を指定します。
  • "setenv MPI_DSM_CPULIST 0-63/2"は各コアを1つづつ飛ばして、0,2,4,6...と使用することを意味します。
  • コア飛ばしをする場合は、dplaceをつけないでください。
    #!/bin/csh
    #$ -ac P=32
    #$ -ac n=64
    #$ -jc F
    #$ -cwd
    setenv MPI_DSM_CPULIST 0-63/2
    mpiexec_mpt -np 32 ./xhpl

ハイブリッドコア飛ばし

  • 8ソケット64コアを占有して、 8プロセスMPI x 4スレッドOpenMPを実行する例です。(1ソケット8コア中で4コアのみを使用します。)
  • #$ -ac P=には実際に使用するコア数(ここでは32)、#$ -ac n=には占有するコア数(ここでは64)を指定します。
  • mpiexec_mptには、MPIプロセス数(ここでは8)を指定します。
  • "omplace -nt 4 -c 0-:st=2"は各MPIプロセス毎に4つのOpenMPスレッドを起動し、一つ飛ばしで配置することを意味します。OpenMPスレッドは0,2,4,...という形で配置されます。
    #!/bin/sh
    #$ -ac P=32
    #$ -ac n=64
    #$ -jc E
    #$ -cwd
    mpiexec_mpt -np 8 omplace -nt 4 -c 0-:st=2   ./a.out

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ