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

2.3.1 prime_omp.c でのデータの競合

prime_omp.c でのデータの競合を調べるには、「2.2.2 データの競合の検出実験を作成する」で作成したいずれかの実験を使用できます。

er_printprime_omp_instr.er 実験のデータの競合情報を表示するには、次のコマンドを入力します。


% er_print prime_omp_inst.er

(er_print) プロンプトで races と入力すると、次のような出力が表示されます。


(er_print)races

Total Races:  2 Experiment:  prime_omp_inst.er

Race #1, Vaddr: 0x21ca8
      Access 1: Write, is_prime,
                       line 26 in "prime_omp.c"
      Access 2: Read,  is_prime,
                       line 23 in "prime_omp.c"
  Total Callstack Traces: 1

Race #2, Vaddr: (Multiple Addresses)
      Access 1: Write, main,
                       line 50 in "prime_omp.c"
      Access 2: Write, main,
                       line 50 in "prime_omp.c"
  Total Callstack Traces: 2
(er_print)

この特定のプログラム実行中に、2 つのデータの競合が生じました。

スレッドアナライザで prime_omp_inst.er 実験結果を開くには、次のコマンドを入力します。


% tha prime_omp_inst.er

次のスクリーンショットには、スレッドアナライザに表示された、prime_omp.c で検出された競合が示されています。

図 2–1 prime_omp.c で検出されたデータの競合

prime_omp.c の「競合 (Races)」タブを表示した「スレッドアナライザ (Thread Analyzer)」ウィンドウのスクリーンショット。

prime_omp.c には、次の 2 つのデータの競合が示されています。

スレッドアナライザの「デュアルソース (Dual Source)」タブでは、データの競合に関連付けられた 2 つのソース位置を同時に確認できます。たとえば、「競合 (Races)」タブで prime_pthr.cRace #2 を選択し、続いて「デュアルソース (Dual Source)」タブをクリックします。次のように表示されます。

図 2–2 prime_omp.c で検出されたデータの競合のソースコード

prime_omp.c でのデータの競合について「デュアルソース (Dual Sources)」タブを示した、「スレッドアナライザ (Thread Analyzer)」ウィンドウのスクリーンショット。


ヒント –

「デュアルソース (Dual Source)」タブの左マージンに「競合アクセス (Race Accesses)」メトリックを表示するには、各ソースパネルのヘッダー上にマウスをドラッグする必要があります。