!!http://www.llnl.gov/computing/tutorials/openMP/exercise.html !!The number of threads defaults to 4. !!To change this, use OMP_NUM_THREADS=6, for example !!some systems may use setenv OMP_NUM_THREADS 6 !****************************************************************************** ! FILE: omp_workshare1.f90 ! DESCRIPTION: ! OpenMP Example - Loop Work-sharing - Fortran Version ! In this example, the iterations of a loop are scheduled dynamically ! across the team of threads. A thread will perform CHUNK iterations ! at a time before being scheduled for the next CHUNK of work. ! AUTHOR: Blaise Barney 5/99 ! LAST REVISED: 01/09/04 !****************************************************************************** PROGRAM WORKSHARE1 INTEGER NTHREADS, TID, OMP_GET_NUM_THREADS, & OMP_GET_THREAD_NUM, N, CHUNKSIZE, CHUNK, I PARAMETER (N=100) PARAMETER (CHUNKSIZE=10) REAL A(N), B(N), C(N) ! Some initializations DO I = 1, N A(I) = I * 1.0 B(I) = A(I) ENDDO CHUNK = CHUNKSIZE !$OMP PARALLEL SHARED(A,B,C,NTHREADS,CHUNK) PRIVATE(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 DO SCHEDULE(DYNAMIC,CHUNK) DO I = 1, N C(I) = A(I) + B(I) WRITE(*,100) TID,I,C(I) 100 FORMAT(' Thread',I2,': C(',I3,')=',F8.2) ENDDO !$OMP END DO NOWAIT PRINT *, 'Thread',TID,' done.' !$OMP END PARALLEL END