Mercurial > hg > CbC > CbC_gcc
view libgomp/testsuite/libgomp.fortran/omp_workshare2.f @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children |
line wrap: on
line source
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