Oracle Solaris Studio 12.2:线程分析器用户指南

2.3.1 prime_omp.c 中的数据争用

要检查 prime_omp.c 中的数据争用,可以使用在2.2.2 创建数据争用检测实验中创建的实验之一。

要使用 er_print 显示 prime_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)

该程序的此次特定运行期间发生了两次数据争用。

要在线程分析器中打开 prime_omp_inst.er 实验,请键入以下命令:


% tha prime_omp_inst.er

以下屏幕抓图显示了在 prime_omp.c 中检测到的争用,如线程分析器所显示。

图 2–1 prime_omp.c 中检测到的数据争用

线程分析器窗口的屏幕抓图,显示了关于 prime_omp.c 数据争用的 "Races"(争用)标签。

prime_omp.c 中显示了两个数据争用:

使用线程分析器中的 "Dual Source"(双源)标签,可以同时看到与数据争用相关联的两个源代码位置。例如,在 "Races"(争用)标签中选择 prime_pthr.cRace #2(争用 2),然后单击 "Dual Source"(双源)标签。将会看到类似如下的内容。

图 2–2 prime_omp.c 中检测到的数据争用的源代码

线程分析器窗口的屏幕抓图,显示了关于 prime_omp.c 数据争用的 "Dual Source"(双源)标签。


提示 –

可能需要在每个源代码面板的标题上拖动鼠标才能看到 "Dual Source"(双源)标签左边界的 "Race Accesses"(竞争访问)度量。