現在、タスクのOpenMP 4.0の構成を使用しようとしています。これは、がに依存しています。したがって、次の例を作成します。この例では、タスクによって1からMまでの数字を持つ行列の最初の行を埋め、最初の行の要素が準備されるたびにタスクによって残りの要素を埋めます。これは、次のコードになり:OpenMP - Fortranでのタスクの依存性
PROGRAM OMP_TEST
IMPLICIT NONE
INTEGER K,L
INTEGER M
PARAMETER (M = 8)
INTEGER A(M,M)
A(1:M, 1:M) = 0
!$omp parallel
!$omp single
DO L=1, M
!$omp task depend(out:A(1,L)) default(shared)
A(1,L) = L
!$omp end task
DO K = 2, M
!$omp task depend(in:A(1,L)) default(shared)
A(K,L) = A(1,L)
!$omp end task
END DO
END DO
!$omp taskwait
!$omp end single
!$omp end parallel
DO K =1 , M
WRITE(*,*) A(K,1:M)
END DO
END PROGRAM
の意識のドキュメントに従うインテル®Fortran 15コンパイラでコンパイルは、文を依存しています。しかし、画面に表示される結果は実行ごとに異なります。行列の最初のゼロさえもいくつかの位置にとどまります。私はそれがこのような値は1〜8は、それぞれの行にあることを期待するよう
1 2 3 4 5 6
7 8
0 0 0 0 0 0
0 0
0 0 3 4 0 0
0 8
1 0 3 4 0 6
0 8
1 0 3 4 5 6
0 8
1 2 3 4 5 6
7 8
0 2 3 4 5 6
7 0
1 2 3 4 5 6
0 8
はなぜタスク間の依存関係が正しく動作しませんん:たとえば?
gcc 5.4を使用してコンパイルすると、同様の誤った結果が生成されます。 –