mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Fortran
		
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Fortran
		
	
	
	
| 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
 |