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

退出打印视图

更新时间: 2014 年 12 月
 
 

prime_omp.c 中的数据争用

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

要使用 er_print 显示 prime_omp_instr.er 实验中的数据争用信息,请键入以下命令。

% er_print prime_omp_inst.er

(er_print) 提示符下,键入 races 可看到类似如下的输出:

(er_print) races

Total Races:  3 Experiment:  prime_omp_inst.er

Race #1, Vaddr: 0x219c8
      Access 1: Write, line 25 in "prime_omp.c",
                       is_prime
      Access 2: Read,  line 22 in "prime_omp.c",
                       is_prime
  Total Callstack Traces: 1

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

Race #3, Vaddr: 0xffbff604
      Access 1: Write, line 50 in "prime_omp.c",
                       main
      Access 2: Write, line 50 in "prime_omp.c",
                       main
  Total Callstack Traces: 1

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

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

% tha prime_omp_inst.er

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

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

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

    prime_omp.c 中显示了三次数据争用:

  • Race #1(争用 1)显示了第 25 行函数 is_prime 中的一次写入与第 22 行同一函数中的一次读取之间的争用。如果查看源代码,可以看到在这些行上,正在对 pflag[ ] 数组进行访问。在线程分析器中,通过单击 "Dual Source"(双源)视图可以很方便地查看位于两个行号位置的源代码,其中还有一些度量显示受影响的代码行上的争用访问次数。

  • Race #2(争用 2)显示了对 main 函数第 49 行的两次写入之间的争用。单击 "Dual Source"(双源)视图可看到对第 49 行 primes [ ] 数组的值进行了多次访问尝试。

  • Race #3(争用 2)显示了对 main 函数第 50 行的两次写入之间的争用。单击 "Dual Source"(双源)视图可看到对第 50 行 primes [ ] 数组的值进行了多次访问尝试。

    Race #3(争用 3)表示数组 primes[ ] 的不同元素中所发生的一组数据争用。通过 Vaddr 显示 Multiple Addresses(多个地址)可以看出这一点。

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

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

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

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