Sun Studio 12: スレッドアナライザユーザーズガイド

2.2 実験の作成

スレッドアナライザは、Sun Studio パフォーマンスアナライザが使用している「収集解析」モデルと同じモデルに従っています。スレッドアナライザの使用に必要な手順は、次の 3 つです。

2.2.1 ソースコードへの計測機構の組み込み

プログラム内のデータ競合を検出できるようにするには、まず、特殊なコンパイラオプションを付けてソースファイルをコンパイルします。C/C++ と Fortran 言語用のこの特殊オプションは、-xinstrument=datarace です。

プログラムのコンパイルに現在使用しているオプションに -xinstrument=datarace オプションを追加します。このオプションは、データ競合の疑いがあるソースファイルにのみ適用できます。


注 –

プログラムをコンパイルするときは、必ず -g を指定してください。競合を検出するためのプログラムのコンパイルでは、最適化レベルを高くしないでください。-xopenmp=noopt を使用して OpenMP プログラムをコンパイルしてください。最適化レベルを高くすると、報告される行番号や呼び出しスタックなどの情報が不正になることがあります。


次は、ソースコードに計測機構を組み込むコマンドの例です。

2.2.2 データ競合検出実験の生成

プログラムを実行して、プロセスの実行中にデータ競合検出実験を生成するには、collect コマンドに -r on フラグを付けて使用します。OpenMP プログラムの場合は、必ず使用するスレッド数を 1 より大きくします。次は、データ競合実験を生成するコマンドの例です。

データ競合が検出されやすいようにするには、collect コマンドで -r race フラグを使用して、データ競合検出実験をいくつか生成することをお勧めします。実験ごとにスレッド数と入力データを変更します。

2.2.3 データ競合検出実験の検証

スレッドアナライザ、パフォーマンスアナライザ、または er_print ユーティリティーを使用して、データ競合検出実験を検証できます。スレッドアナライザとパフォーマンスアナライザはともに GUI インタフェースを提供します。 デフォルトタブ数が少ないことを除けば、スレッドアナライザはパフォーマンスアナライザと同じです。

スレッドアナライザの GUI は、メニューバー、ツールバー、および各種表示用のタブを含む分割区画で構成されます。左側のタブには、デフォルトで次の 3 つのタブが表示されます。

スレッドアナライザ画面の右側の区画には、次の 2 つのタブが表示されます。

一方、er_print ユーティリティーは、コマンド行インタフェースを提供します。次のサブコマンドは er_print ユーティリティーで競合を調べるときに有用です。

詳細は、collect.1tha.1analyzer.1、および er_print.1 のマニュアルページを参照してください。