スレッドアナライザは、Sun Studio パフォーマンスアナライザが使用している「収集解析」モデルと同じモデルに従っています。スレッドアナライザの使用に必要な手順は、次の 3 つです。
プログラム内のデータ競合を検出できるようにするには、まず、特殊なコンパイラオプションを付けてソースファイルをコンパイルします。C/C++ と Fortran 言語用のこの特殊オプションは、-xinstrument=datarace です。
プログラムのコンパイルに現在使用しているオプションに -xinstrument=datarace オプションを追加します。このオプションは、データ競合の疑いがあるソースファイルにのみ適用できます。
プログラムをコンパイルするときは、必ず -g を指定してください。競合を検出するためのプログラムのコンパイルでは、最適化レベルを高くしないでください。-xopenmp=noopt を使用して OpenMP プログラムをコンパイルしてください。最適化レベルを高くすると、報告される行番号や呼び出しスタックなどの情報が不正になることがあります。
次は、ソースコードに計測機構を組み込むコマンドの例です。
cc -xinstrument=datarace -g -mt pthr_prime.c
cc -xinstrument=datarace -g -xopenmp=noopt omp_prime.c
プログラムを実行して、プロセスの実行中にデータ競合検出実験を生成するには、collect コマンドに -r on フラグを付けて使用します。OpenMP プログラムの場合は、必ず使用するスレッド数を 1 より大きくします。次は、データ競合実験を生成するコマンドの例です。
collect -r race ./a.out
データ競合が検出されやすいようにするには、collect コマンドで -r race フラグを使用して、データ競合検出実験をいくつか生成することをお勧めします。実験ごとにスレッド数と入力データを変更します。
スレッドアナライザ、パフォーマンスアナライザ、または er_print ユーティリティーを使用して、データ競合検出実験を検証できます。スレッドアナライザとパフォーマンスアナライザはともに GUI インタフェースを提供します。 デフォルトタブ数が少ないことを除けば、スレッドアナライザはパフォーマンスアナライザと同じです。
スレッドアナライザの GUI は、メニューバー、ツールバー、および各種表示用のタブを含む分割区画で構成されます。左側のタブには、デフォルトで次の 3 つのタブが表示されます。
「競合」タブ - プログラム内で検出されたデータ競合の一覧です。デフォルトで選択されているタブです。
「デュアルソース」タブ - 選択されたデータ競合の 2 つの アクセスに対応する 2 つのソース位置を示します。データ競合の発生したソース行が強調表示されます。
「実験」タブ - 実験の負荷オブジェクトを示すとともに、エラーおよび警告メッセージを表示します。
スレッドアナライザ画面の右側の区画には、次の 2 つのタブが表示されます。
「概要」タブ - 「競合」タブで選択されたデータ競合アクセスに関する概要情報を表示します。
「競合の詳細」 - 「競合」タブで選択されたデータ競合アクセスに関する詳細情報を表示します。
一方、er_print ユーティリティーは、コマンド行インタフェースを提供します。次のサブコマンドは er_print ユーティリティーで競合を調べるときに有用です。
-races: 実験で検出されたすべてのデータ競合を報告します。
-rdetail race_id: 指定された race_id を持つデータ競合の詳細情報を表示します。race_id に「all」を指定した場合は、すべてのデータ競合に関する詳細情報が表示されます。
-header: 実験に関する説明を表示し、エラーと警告を報告します。
詳細は、collect.1、tha.1、analyzer.1、および er_print.1 のマニュアルページを参照してください。