Scientific Computing & Visualization
Help Contact
About Accounts Computation Visualization Documentation Services

Gfortran Bug

Due to an apparent gfortran compiler bug, care must be exercised with OpenMP directives' placement. For example,


program foo
implicit none
!$    integer :: IAM, NPROCS
!$    integer OMP_GET_NUM_THREADS, OMP_GET_THREAD_NUM, OMP_IN_PARALLEL
!$OMP  PARALLEL DEFAULT(none) PRIVATE(IAM, NPROCS)
!$    IAM = OMP_GET_THREAD_NUM()
!$    NPROCS = OMP_GET_NUM_THREADS()
!$    print *, 'I AM processor ',IAM, ' (of ', NPROCS, ')'
!$    print *, 'Am I in a parallel region (T)? ', OMP_IN_PARALLEL()
!$OMP END PARALLEL
end program foo
In this example, since the OpenMP key word PARALLEL starts two spaces to the right of !$OMP, the GNU gfortran compiler fails to recognize this to be an OpenMP directive !

Here is what happens when the above FORTRAN code is compiled with gfortran:


katana:~ % gfortran -fopenmp -o foo foo.f90
 In file foo.f90:5

!$OMP  PARALLEL DEFAULT(none) PRIVATE(IAM, NPROCS)
     1
Error: Unclassifiable OpenMP directive at (1)
 In file foo.f90:10

!$OMP END PARALLEL
                 1
Error: Unexpected !$OMP END PARALLEL statement at (1)
The above problem is restricted to gfortran. There is no similar problems for the GNU C compiler OpenMP directives (i.e., #pramas).
Boston University
Boston University
 
OIT | CCS | December 19, 2007  
Scientific Computing & Visualization Boston University home page Boston University home page