Sun Studio 12: Fortran プログラミングガイド

10.5 並列化されたプログラムをデバッグする

Fortran ソースコード:


    real x / 1.0 /, y / 0.0 /
    print *, x/y
    end
    character  string*5, out*20
    double precision value
    external exception_handler
    i = ieee_handler('set', 'all', exception_handler)
    string = '1e310'
    print *, '入力文字列', string, ' は: ', value
    print *, '1e300 * 1e10 の値は:', 1e300 * 1e10
    i = ieee_flags('clear', 'exception', 'all', out)
    end

    integer function exception_handler(sig, code, sigcontext)
    integer sig, code, sigcontext(5)
    print *, '*** IEEE 例外が発生しました!'
    return
    end

実行時出力:


*** IEEE 例外が発生しました!
 入力文字列 1e310 は: Infinity
  1e300 * 1e10 の値は: Inf
 注意: 次の IEEE 浮動小数点トラップが有効になっています;
  ieee_handler(3M) を参照:
 Inexact;  Underflow;  Overflow;  Division by Zero;  Invalid
   Operand;
 Sun の IEEE 演算の実装については、
『数値計算ガイド』を参照してください。

並列化されたプログラムをデバッグするには、新たな作業が必要になります。次に、その方法をいくつか示します。

10.5.1 デバッグの最初の手順

エラーの原因を特定するためにすぐに試してみることができる手順がいくつかあります。

これを


    DO I=1,N
      ...
      CALL SNUBBER(I)
      ...
    ENDDO

これに置き換える


      DO I1=1,N
      I=I1
      ...
      CALL SNUBBER(I)
      ...
    ENDDO