此选项提供了检测使用 TASK COMMON 及并行化的程序中的通用块不一致性的调试检查。(请参见《Fortran 编程指南》的“并行化”一章中有关 TASK COMMON 指令的讨论。)
缺省值为 -xcommonchk=no;即,用于检测通用块不一致性的运行时检查处于禁用状态,因为它会导致性能降低。请仅在程序开发和调试过程中使用 -xcommonchk=yes,而不应将其用于符合最终产品质量的程序。
使用 -xcommonchk=yes 进行编译会启用运行时检查。如果在一个源程序单元中声明为正规通用块的通用块出现在 TASK COMMON 指令上的某个其他位置,则程序将停止并显示一条错误消息,指出第一个此类不一致。不带值的 -xcommonchk 与 -xcommonchk=yes 等效。
示例:tc.f 中缺少 TASKCOMMON 指令
demo% cat tc.f common /x/y(1000) do 1 i=1,1000 1 y(i) = 1. call z(57.) end demo% cat tz.f subroutine z(c) common /x/h(1000) C$PAR TASKCOMMON X C$PAR DOALL do 1 i=1,1000 1 h(i) = c* h(i) return end demo% f95 -c -O4 -parallel -xcommonchk tc.f demo% f95 -c -O4 -parallel -xcommonchk tz.f demo% f95 -o tc -O4 -parallel -xcommonchk tc.o tz.o demo% tc ERROR(libmtsk): inconsistent declaration of threadprivate/taskcommon x_: not declared as threadprivate/taskcommon at line 1 of tc.f demo% |