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.