使用 f95 编译器的全局程序检查功能,可以对 Fortran 95 程序的 OpenMP 指令进行静态的过程间验证。使用 -XlistMP 标志进行编译可启用 OpenMP 检查。(来自 -XlistMP 的诊断消息会出现在另一种文件中,该文件的名称由源文件名和 .lst 扩展名构成)。编译器将诊断下列违规和并行化抑制因素:
对并行指令规范的违规,包括不适当的嵌套。
因使用数据而被过程间依赖性分析检测出的并行化抑制因素。
由过程间指针分析检测出的并行化抑制因素。
例如,使用 -XlistMP 编译源文件 ord.f 会生成诊断文件 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
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
|
本例中,WORK 子例程中的 ORDERED 指令收到有关第二个 DO 指令的诊断,因为该指令缺少 ORDERED 子句。