OpenMP* の IF 節の副作用

OpenMP* の IF 節には、副作用があってはなりません。

OpenMP* 仕様では、IF 節の評価の副作用がどの順序で、何回発生するか未定義です。そのため、副作用のある IF 節の存在は、プログラムをあいまいにします。実装で定義されているセマンティクスに依存するプログラムは、1 つの実装から別の実装へ移植できないことがあります。

ID

問題箇所

説明

1

OpenMP* の使用方法に関するエラー

不正な IF 節の場所


    real r
    integer i, j, mysub
    common /cc/ j
    r = 2.7
    j = 50
!$OMP PARALLEL DO SHARED(r) IF(mysub() .LT. j)
    do i = 1, 3
        call sub(r)
    end do
!$OMP END PARALLEL DO
    print *, r
    end

    function mysub()
        integer j, mysub
        common /cc/ j
        j = 100
        mysub = 75
    end function mysub

    subroutine sub(r)
        real r
        r = r + 9.8
    end subroutine sub
        

© 2010 Intel Corporation. 無断での引用、転載を禁じます。