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