C****************************************************************************** C FILE: omp_workshare2.f C DESCRIPTION: C OpenMP Example - Sections Work-sharing - Fortran Version C In this example, the OpenMP SECTION directive is used to assign C different array operations to threads that execute a SECTION. Each C thread receives its own copy of the result array to work with. C AUTHOR: Blaise Barney 5/99 C LAST REVISED: 01/09/04 C****************************************************************************** PROGRAM WORKSHARE2 INTEGER N, I, NTHREADS, TID, OMP_GET_NUM_THREADS, + OMP_GET_THREAD_NUM PARAMETER (N=50) REAL A(N), B(N), C(N) ! Some initializations DO I = 1, N A(I) = I * 1.0 B(I) = A(I) ENDDO !$OMP PARALLEL SHARED(A,B,NTHREADS), PRIVATE(C,I,TID) TID = OMP_GET_THREAD_NUM() IF (TID .EQ. 0) THEN NTHREADS = OMP_GET_NUM_THREADS() PRINT *, 'Number of threads =', NTHREADS END IF PRINT *, 'Thread',TID,' starting...' !$OMP SECTIONS !$OMP SECTION PRINT *, 'Thread',TID,' doing section 1' DO I = 1, N C(I) = A(I) + B(I) WRITE(*,100) TID,I,C(I) 100 FORMAT(' Thread',I2,': C(',I2,')=',F8.2) ENDDO !$OMP SECTION PRINT *, 'Thread',TID,' doing section 2' DO I = 1+N/2, N C(I) = A(I) * B(I) WRITE(*,100) TID,I,C(I) ENDDO !$OMP END SECTIONS NOWAIT PRINT *, 'Thread',TID,' done.' !$OMP END PARALLEL END