You can obtain a static, interprocedural validation of a Fortran 95 program’s OpenMP directives by using the f95 compiler’s global program checking feature. Enable OpenMP checking by compiling with the -XlistMP flag. (Diagnostic messages from -XlistMP appear in a separate file created with the name of the source file and a .lst extension). The compiler will diagnose the following violations and parallelization inhibitors:
Violations in the specifications of parallel directives, including improper nesting.
Parallelization inhibitors due to data usage, detected by interprocedural dependence analysis.
Parallelization inhibitors detected by interprocedural pointer analysis.
For example, compiling a source file ord.f with -XlistMP produces a diagnostic file ord.lst:
FILE "ord.f" 1 !$OMP PARALLEL 2 !$OMP DO ORDERED 3 do i=1,100 4 call work(i) 5 end do 6 !$OMP END DO 7 !$OMP END PARALLEL 8 9 !$OMP PARALLEL 10 !$OMP DO 11 do i=1,100 12 call work(i) 13 end do 14 !$OMP END DO 15 !$OMP END PARALLEL 16 end 17 subroutine work(k) 18 !$OMP ORDERED ^ **** ERR-OMP: It is illegal for an ORDERED directive to bind to a DO directive (ord.f, line 10, column 2) that does not have the ORDERED clause specified. 19 write(*,*) k 20 !$OMP END ORDERED 21 return 22 end |
In this example, the ORDERED directive in subroutine WORK receives a diagnostic that refers to the second DO directive because it lacks an ORDERED clause.