Oracle® Solaris Studio 12.4: スレッドアナライザユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

コードを計測する

プログラムでデータの競合の検出を可能にするには、実行時にメモリーアクセスをモニターするコードをあらかじめ計測しておく必要があります。計測機構の組み込みは、アプリケーションのソースコードまたはアプリケーションバイナリで行えます。このチュートリアルでは、プログラムを計測する両方のメソッドの使用方法を示します。

ソースコードを計測する

ソースコードを計測するには、特別なコンパイラオプション -xinstrument=datarace を使ってアプリケーションをコンパイルする必要があります。このオプションは、データの競合の検出用に生成したコードを計測するようにコンパイラに指示します。

-xinstrument=datarace コンパイラオプションを、プログラムのコンパイルに使用する既存のオプションセットに追加します。


注 -  -xinstrument=datarace を使ってプログラムをコンパイルするときには、スレッドアナライザの全機能を有効にするための追加情報を生成するため、必ず –g オプションも指定してください。データの競合の検出用にプログラムをコンパイルするときには、高度な最適化を指定しないでください。-xopenmp=noopt を使って OpenMP プログラムをコンパイルしてください。高度な最適化を使用した場合、行番号や呼び出しスタックなど、報告された情報が間違っていることがあります。

このチュートリアル用にソースコードを計測するには、次のコマンドを使用できます。

% cc -xinstrument=datarace -g -xopenmp=noopt -o prime_omp_inst prime_omp.c -lm
% cc -xinstrument=datarace -g -o prime_pthr_inst prime_pthr.c -lm

例では、バイナリが計測済みバイナリであることがわかるように、出力ファイルの末尾に _inst と指定されています。これは必須ではありません。

バイナリコードを計測する

ソースコードの代わりにプログラムのバイナリコードを計測するには、discover ツールを使用する必要があり、このツールは、Oracle Solaris Studio に含まれ、discover(1) のマニュアルページとOracle Solaris Studio 12.4: Discover および Uncover ユーザーズガイド に記載されています。

チュートリアルの例では、次のコマンドを入力してコードをコンパイルします。

% cc -xopenmp=noopt -g -o prime_omp prime_omp.c -lm
% cc -g -O2 -o prime_pthr prime_pthr.c -lm

続いて、discover を、作成した prime_omp および prime_pthr 最適化済みバイナリで実行します。

% discover -i datarace -o prime_omp_disc prime_omp
% discover -i datarace -o prime_pthr_disc prime_pthr

これらのコマンドは計測済みバイナリ、prime_omp_disc および prime_pthr_disc を作成するので、これらのバイナリを collect で使用して、スレッドアナライザで検証する実験を作成できます。