FORTRAN の高速化について
Speed Up FORTRAN


  1. ベクトル化について

  2. 行列の要素など規則的に並んだ配列データ(ベクトルデータ)について,高速に演算を行うことができるようになります. 自作のプログラムをより高速化したい場合には,ベクトル化の条件を考慮しつつプログラミングを行う必要があります.

  3. ベクトル化の基本事項

    1. ベクトル化の対象

    2. 最深DOループ(多重ループや外側のDOループをベクトル化する場合もある)
          DO 10 I=1,N
      
            DO 20 J=1,N
      
              | 最深DOループ
      
      20    continue
      
      10  continue
      
      
    3. ベクトル化時の実行順序

    4. スカラ実行とベクトル実行では実行順序が異なる.
          DO 100 I=1, N
      
            A(I) = C(I) + D(I)
      
            B(I) = C(I) * D(I)
      
      100 continue
      
      
      スカラ実行 ベクトル実行
      A(1) = C(1) + D(1)
      B(1) = C(1) * D(1)
      A(2) = C(2) + D(2)
      B(2) = C(2) * D(2)
      A(3) = C(3) + D(3)
      B(3) = C(3) * D(3)
      ..................
      A(N) = C(N) + D(N)
      B(N) = C(N) * D(N)
      A(1) = C(1) + D(1)
      A(2) = C(2) + D(2)
      A(3) = C(3) + D(3)
      ..................
      A(N) = C(N) + D(N)
      B(1) = C(1) * D(1)
      B(2) = C(2) * D(2)
      ..................
      B(N) = C(N) * D(N)

  4. ベクトル化に関する性能指標

  5. ベクトル化率
  6. ベクトル化の基本条件

  7. DOループが満たすべき条件

    変数及び配列要素が満たすべき条件

    1. 配列要素の境界は,4の倍数(8の倍数)番地
    2. EQUIVALENCE文に現れる配列は,注意が必要.
    3. 同一変数が2度以上出てくる場合は,いずれも引用のみか,定義が引用に先行している.
    4. 同一の入れる要素がループ中に2度以上出現する場合,それらの定義,引用関係がベクトル化後も正しく保たれていること.

  8. 拡張ベクトル化機能

  9. ベクトル化の基本条件を満たしていないDOループに対しても,可能であれば拡張ベクトル化機能でループの一部分あるいは, 全体をベクトル化する.
    1. 最大/最小要素を求めるループ

    2. 最大/最小要素および,要素番号を求めるループは,コンパイラが認識
    3. 飛び出しを含むループのベクトル化

    4. ループ分割によるベクトル化

    5. 多重ループのベクトル化

    6. 多重ループの入れ換え

    7. ループ内に次の不可要因がない.
    8. 外部関数を含むループのベクトル化

    9. 文の入れ換え,作業用ベクトルの使用による定義,引用関係の矛盾解消