ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: スレッドアナライザユーザーズガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
実験結果を収集する前に、データの競合検出用アプリケーションを計測するためのヒント
コンパイラオプション -xinstrument=datarace が不正であることを示すエラーメッセージが、コンパイラから表示された場合、スレッドアナライザをサポートしていない古いバージョンの Sun Studio コンパイラを使用しています。使用しているコンパイラのバージョンは、コマンド cc -Version と入力すると確認できます。スレッドアナライザをサポートする最も古いバージョンは、2006 年 6 月の日付のものです。
次に示すように、データの競合の検出用にバイナリが計測されていない場合、collect -r race コマンドは、警告を発行します。
% collect -r races a.out WARNING: Target `a.out' is not instrumented for datarace detection; reported datarace data may be misleading
nm コマンドを使用して、tha ルーチンの呼び出しを検索することにより、データの競合の検出用にバイナリが計測されているかどうかを判断できます。名前が __tha_ で始まるルーチンが表示されたら、バイナリは計測されています。例出力は次のとおりです。
ソースレベルの計測
% cc -xopenmp -g -xinstrument=datarace source.c % nm a.out | grep __tha_ [71] | 135408| 0|FUNC |GLOB |0 |UNDEF |__tha_get_stack_id [53] | 135468| 0|FUNC |GLOB |0 |UNDEF |__tha_src_read_w_frame [61] | 135444| 0|FUNC |GLOB |0 |UNDEF |__tha_src_write_w_frame
バイナリレベルの計測
% cc -xopenmp -g source.c % discover -i datarace -o a.out.i a.out % nm a.out.i | grep __tha_ [88] | 0| 0|NOTY |GLOB |0 |UNDEF |__tha_read_w_pc_frame [49] | 0| 0|NOTY |GLOB |0 |UNDEF |__tha_write_w_pc_frame
discover を使用するには、いずれかのコンパイラ最適化フラグ (-xO1、-xO2、-xO3、-xO4、-xO5) で入力バイナリをコンパイルする必要があります。コンパイラは、Oracle Solaris Studio 12 Update 1 以降のリリースのものである必要があります。オペレーティングシステムは、Oracle Solaris 10 Update 5 または Oracle Solaris 11 以上である必要があります。そうでない場合は、次に示すように警告が表示される場合があります。
% discover -i datarace -o a.out.i a.out discover (warning): a.out has no annotations. Results may be incomplete. See discover documentation for compiler flag/OS recommendation
また、バイナリがコンパイラオプション -xbinopt=prepare を付けてコンパイルされた場合は、SPARC ベースのシステムで実行中の、以前の Solaris バージョンでも discover ツールを使用できることがあります。このコンパイラオプションについては、cc(1)、CC(1)、または f95(1) のマニュアルページを参照してください。