第1回 parallel 計算機の使い方

実施日:1996年6月13日




目次
  1. 情報センター並列計算機eic(Cray CS6400)の特長
  2. 並列計算機CS6400向き・不向きのジョブ
  3. eicのジョブクラス
  4. eicのバッチジョブの投入法
  5. CS6400の並列化機能を使うためには?
  6. CS6400の並列化の状態をみるには?
  7. CPU時間の計測
  8. 簡単なプログラムでどうなるか?

  1. 情報センター並列計算機eic(Cray CS6400)の特長
    • メモリ共有型の並列計算機
    • 32台のプロセッサ、各プロセッサにはSuperSparc+を搭載
    • メモリ8GB
    • 60 Mflops/CPU, 180MIPS/CPU

                             ⇒
  2. 並列計算機eic向き・不向きのジョブ
    • 並列計算機を使ってスピードアップするジョブ
      計算がメイン
      並列化の処理がしてあるプログラム
      F77, F90, Apogee Cで書かれたプログラム
    • 並列計算機を使ってスピードアップが期待できないジョブ
      I/Oの多いジョブ
      検索
      グラフィック出力
      並列化されていないアプリケーションを使っている。
      SPARC C, GNU Cで書かれたプログラム
      並列化の処理が正確でないプログラム
                             ⇒
  3. eicのジョブクラス
    ジョブクラスCPU limitメモリ制限RUN limit
    TSSunlimit unlimit
    hikari5 daysunlimit3
    nozomi20 daysunlimit3
    kodama50 daysunlimit1
    annex1800 secunlimit3

        ※ 同一ユーザーは1人/クラス
                             ⇒
  4. eicで自動並列化オプションを使ってバッチジョブを投入する方法

    ▼F77の場合
       1. F77のプログラム(例:prog1.f)を作成
       2. コンパイルする。
         f77 -o prog1 -autopar prog1.f
       3. ジョブスクリプトファイル(例:batch1)の作成
          ◎batch1 の例
           # QSUB -eo
           setenv parallel 6
           フルパス/prog1
       4. ジョブの投入
           cqsub -q hikari batch1

    ▼F90の場合
       1. F90(F77)のプログラム(例:prog1.f)を作成
       2. コンパイルする。
         f90 -o prog1 -O3 prog1.f
          ※オプションの-O3はハイフンの後は大文字のOです。
           ゼロではありません。
       3. ジョブスクリプトファイル(例:batch1)の作成
          ◎batch1 の例
           # QSUB -eo
           setenv NCPUS 6
           フルパス/prog1
       4. ジョブの投入(例:hikariに投入する場合)
           cqsub -q hikari batch1

    ●ともに結果の出力は上の例では batch1.oXXXXという名前のファイルになる。

  5. CS6400の並列化機能を使うためには?

    自動並列化機能

    • F77の場合
       コンパイル・オプション -autopar  をつけてコンパイルすること。
    • F90の場合
       コンパイル・オプション -O3 (ゼロではなく大文字のo)をつけてコンパイルすること。 
    • Apogee Cの場合
       コンパイル・オプション -Xkap=mp  をつけてコンパイルすること。

    並列化ディレクティブを自分で設定する。

    • F77の場合
        1. 並列化する箇所を自分で指定 c$par 
        ◆コンパイル・オプション -parallel または -explicitpar 
            をつけてコンパイルすること。
    • F90の場合
        1. 自動並列化ディレクティブ !MIC$ を使う。
        2. 並列化する箇所を自分で指定 !DIR$ 
        ◆いずれの場合にもコンパイル・オプション -O2 以上にすること。 
    並列化を意識して書かれたライブラリを使う。

    情報センターでは数値計算ライブラリとしてLibSci, IMSLなどを用意しています。これらについては 第2回の講習会で説明します。
                             ⇒
  6. CS6400の並列化の状態をみるには?

    ▼F77の場合
        コンパイラー・オプション -loopinfo をいれると
        どの部分を並列化したかを画面に表示する。
    ▼F90の場合
        コンパイラー・オプション -r2 をいれると
        どの部分を並列化したかをporg.lstに表示する。
              
       ◎prog. lst の表示例
       1    dimension a (1000), b (1000), c (1000) 
       2 1---- do k=1, 1000 
       3 1    a(1)=k 
       4 1    b(1)=k
       5 1----> end do 
       6 1----- do k=1, 1000 
       7 1    c(k)=a(k)*b(k)
       8 1----> end do 
       9     end 
    
       considerata 
         1)<4>  Local Variabte "C" is defined but never used 
       f90 compiIer -2 messages . 
       1) A Ioop startiflg at Iine 2 was eliminated 
                  by optimization. 
       2) 
       Note: Enter "explain cf90-6002" toget a more detailed explanation.
    
       ------------ f77 --------------
       line2:parallelized
       line?:not parallelized
    
                             ⇒
  7. CPU時間の計測

    ● F90の場合のプログラム例を示します。

       program f90
        dimension dum(2)
           :
        ops=2.*n**3
         t1=etime(dum)
          call sub(a,b,c,n)
         t2=etime(dum)
         flops=ops/(t2-t1)
         write(*,*) t2-t1,'sec ',flops*1.e-6,'Mflops'
           :

       function etime()
        etime=timef()*0.001
       return
       end

    ● 計測例:
        行列の積 ABを計算する。
        n=32〜1024(2)
        NCPUS=1,2,3,6の各場合
        Mflops=2*n**3/(t2-t1)*0.001

     ▽ IMSL90 (IMSL社製Fortran90対応) ライブラリなし、
                           ここではmatmulを使う。
     ▽ 
    IMSL90 (IMSL社製Fortran90対応F0).x.
     ▽ IMSL77 (IMSL社製Fortran77対応) DMRRR
     ▽ LibSci(Cray社製)        DGEMM
                             ⇒
  8. 簡単なプログラムでどうなるか?

    ● do (1)
      do (2)
       do (3)
         Ci,j=Ci,j+Ai,k・Bk,j  という計算をしてみましょう。
      ここではCPUを16台使っています。
    (1)(2)(3)CPU1台並列化 
    n=128n=256
    ijk4MFLOPS4MFLOPS16倍63MFLOPS
    ikj1MFLOPS1MFLOPS3倍3MFLOPS
    jik4MFLOPS4MFLOPS16倍72MFLOPS
    jki8MFLOPS8MFLOPS16倍128MFLOPS
    kij1MFLOPS1MFLOPS3倍2MFLOPS
    kji7MFLOPS7MFLOPS7倍45MFLOPS

        ※ 簡単なチューニングで200MFLOPS/560MFLOPS
      ● Cacheを考えずに作っても6CPUで80MFLOPS
      ● 行列積のライブラリプログラムには問題あり
     ⇒ だからといって「ユーザーがプログラムを作る」べきではない!
       有効にライブラリを使うようにしましょう。
                         ⇒
講習会内容一覧に戻る