第2回 数値計算ライブラリの使い方

実施日:1996年6月20日




目次
  1. 情報センターで使える数値計算ライブラリ
  2. 情報センターで使える数値計算ライブラリの機能
  3. どのライブラリを使ったらいいか?
  4. プログラム中でライブラリを呼ぶ!
  5. コンパイルの仕方、ジョブの投入のしかた
  6. CPU時間の計測

  1. 情報センターで使える数値計算ライブラリ
      カッコ内は開発提供元、[] 内は今後の説明に使う略称
    • Cray Soft LibSci 1.0 (Cray Research) [LibSci]
    • IMSL Fortran90 MP Library 1.0 (Visual Numerics) [IMSL F90]
    • IMSL Fortran77 MP Library 3.0 (Visual Numerics)
        ●f77でコンパイルしたもの  [新 IMSL F77]
        ●f90でコンパイルしたもの  [旧 IMSL F77]
    • IMSL Fortran77 Library 2.0 (Visual Numerics) [kamo族 IMSL]

                             ⇒
  2. 情報センターで使える数値計算ライブラリの機能
    • LibSci   スカラ、ベクトル、行列などに対する浮動小数点演算、整数、論理データに対する演算を行うルーチンを集めたもの。並列プログラミングの最適化がなされているので、ルーチンを呼ぶだけでCS6400の並列化機構を効率よく利用することができる。Fortranからの呼び出しを前提に設計されているが、Cからも呼び出すことができる。
        ▼線形代数計算(BLAS)
        ▼連立1次方程式、行列固有値問題などの数値計算(LAPACK)
        ▼FFT、信号処理
        ▼乱数
    • 旧 IMSL F77   線形代数計算 FFT 乱数
        (IMSL独自のBLAS, 線形計算)
        微分方程式、補間・近似、非線形方程式(常、偏)、特殊関数
    • 新 IMSL F77    旧 IMSL F77+160個のdouble complex使用のライブラリ
    • IMSL F90   f90で最初からかかれたもの。   線形代数計算 FFT 乱数、積分、微分方程式
        (Deffiend Operation)

       
                             ⇒
  3. どのライブラリを使ったらいいか?
       
                             ⇒
  4. プログラム中でライブラリを呼ぶ!
       
    LibSci DGEMMをcf90から使った
       LibSciとCとのリンク
       IMSL F77(DMRRR)をcf90またはf77から使った例
       IMSL F77(DQ2ROG)とCとのリンク
       IMSL F90 Deffiend Operationの
       IMSL F90 lin_sol_genの使用例
                             ⇒
  5. コンパイルの仕方、ジョブの投入のしかた
    • LibSci
         LibsciをリンクするにはfortranまたはCのコマンド行に
          -lSci -lthread
         を加える。
    • 旧 IMSL F77、新 IMSL F77
         ▼f90の場合
           f90 file.f $LINK_F90
         ▼f77の場合
           f77 file.f $LINK_F90 -L/opt/craysoft/f90e/lib -lf90 -lthread
    • IMSL F90
         ▼f90の場合
           f90 file.f $INTF1 $INTF2 $INTF3 $INTF4 $LINK_F90

                             ⇒
  6. 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

    ● 計測例1:
        行列の積 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
    ● 計測例2:
        連立方程式 Ax=Bを計算する。
        n=32〜1024(2)
        NCPUS=1,2,3,6の各場合
        Mflops=2*n**3/(t2-t1)*0.001

     ▽ IMSL90 (IMSL社製Fortran90対応) lin_sol_gen
     ▽ IMSL90 (IMSL社製Fortran90対応F0).ix.
     ▽ IMSL77 (IMSL社製Fortran77対応) DLSORG
     ▽ LibSci(Cray社製)        DGETRF, DGETRS
                             ⇒
講習会内容一覧に戻る