Директива WORKSHARE выделяет набор независимых операторов, каждый из которых будет выполняться своей нитью. Директива применима только в языке Фортран. В набор могут входить: присваивания массивов и скалярных переменных, операторы и конструкции FORALL, WHERE, директивы ATOMIC, CRITICAL, PARALLEL.
Fortran:
!$OMP WORKSHARE
block1
[!$OMP SECTION
структурированный блок ]
!$OMP END WORKSHARE [ nowait ]
Пример программы:
Программа workshare.f
PROGRAM workshare INTEGER N, I, J PARAMETER (N=100) REAL AA(N,N), BB(N,N), CC(N,N), DD(N,N), FIRST, LAST C Some initializations DO I = 1, N DO J = 1, N AA(J,I) = I * 1.0 BB(J,I) = J + 1.0 ENDDO ENDDO !$OMP PARALLEL SHARED(AA,BB,CC,DD,FIRST,LAST) !$OMP WORKSHARE CC = AA * BB DD = AA + BB FIRST = CC(1,1) + DD(1,1) LAST = CC(N,N) + DD(N,N) !$OMP END WORKSHARE NOWAIT !$OMP END PARALLEL END