我目前正在嘗試使用任務構建OpenMP 4.0,包括取決於聲明用於我的Fortran代碼。因此,我創建了下面的示例,它應該用一個任務填充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 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
爲什麼任務之間的依賴關係不正確,因爲我希望它使得值1至8每一行中工作?
使用gcc 5.4編譯會產生類似的錯誤結果。 –