Алгоритмы параллельных вычислений и программирование. Бурова И.Г - 139 стр.

UptoLike

4) RUNTIME — способ распределения итераций цикла опреде-
ляется в процессе работы программы в зависимости от значения
переменной OMP_SCHEDULE, задаваемой пользователем.
Пример строки для распределения итераций
!$OMP DO SCHEDULE (DYNAMIC,10)
Здесь будет использоваться динамическое распределение ите-
раций блоками по 10 итераций.
В конце параллельного цикла происходит неявная барьерная
синхронизация: дальнейшее выполнение параллельно работающих
нитей начнется только тогда, когда все нити достигнут конца цикла
(даже если директива !$OMP END DO отсутствует).
Если в синхонизации нет необходимости, то завершающей де-
рективой должна быть
!$OMP END DO NOWAIT
Она позволяет продолжить выполнение программы каждой
нити без синхронизации с остальными.
При организации параллельных циклов должны быть выпол-
нены естественные ограничения:
1) работа любой нити не должна зависить от работы остальных
нитей,
2) не должно быть побочных выходов из цикла.
Например, пусть в параллельной секции программы встреча-
ется фрагмент
!$OMP DO SCHEDULE (STATIC,2)
DO i=1,n
DO i=1,m
A(i,j)=(B(i,j-1)+b(i-1,j))/2.0
END DO
END DO
!$OMP END DO
Здесь внешний цикл объявлен параллельным, причем указано
блочно-циклическое распределение итераций по две итерации в
блоке. По отношению к внутреннему циклу никаких указаний нет,
так что он будет выполняться (последовательно) каждой нитью.
140