使用 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 子句。