В настоящее время я пытаюсь использовать задачу . Конструкция 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
Compile с Intel 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 приводит к аналогичному неправильному результату. –