このオプションは、TASK COMMON や並列化を使用しているプログラムで共通ブロックに不一致がないかデバッグ検査を行います。『Fortran プログラミングガイド』の「並列化」の章で TASK COMMON 指令に関する説明を参照してください。
デフォルトは -xcommonchk=no です。 共通ブロック不一致の実行時検査を行うとパフォーマンスが低下するので、デフォルトではこのオプションは無効になっています。-xcommonchk=yes はプログラム開発とデバッグのときだけ使用し、製品版のプログラムには使用しないでください。
-xcommonchk=yes でコンパイルすると実行時検査が行われます。1 つのソースプログラム単位で正規の共通ブロックとして宣言されている共通ブロックが 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
エラー (libmtsk): threadprivate/taskcommon の宣言の不一致
x_: tc.f の 1 行目では threadprivate/taskcommon として宣言しません。
demo%
|