diff libgomp/testsuite/libgomp.fortran/omp_workshare1.f @ 0:a06113de4d67

first commit
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Fri, 17 Jul 2009 14:47:48 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libgomp/testsuite/libgomp.fortran/omp_workshare1.f	Fri Jul 17 14:47:48 2009 +0900
@@ -0,0 +1,48 @@
+C******************************************************************************
+C FILE: omp_workshare1.f
+C DESCRIPTION:
+C   OpenMP Example - Loop Work-sharing - Fortran Version
+C   In this example, the iterations of a loop are scheduled dynamically
+C   across the team of threads.  A thread will perform CHUNK iterations
+C   at a time before being scheduled for the next CHUNK of work.
+C AUTHOR: Blaise Barney  5/99
+C LAST REVISED: 01/09/04
+C******************************************************************************
+
+      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