线程分析器沿用与 Sun Studio 性能分析器相同的“收集分析”模型。使用线程分析器包括以下三个步骤:
为了在程序中启用数据争用检测,必须首先使用特殊的编译器选项编译源文件。对 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 程序,请确保所用的线程超过一个。以下是创建数据争用实验的示例命令:
collect -r race./a.out
为增大检测到数据争用的可能性,建议将 collect 与 r race 标志一起使用,以创建若干个数据争用检测实验。在不同的实验中使用不同的线程数和不同的输入数据。
可以使用线程分析器、性能分析器或 er_print 实用程序检查数据争用检测实验。线程分析器和性能分析器都提供 GUI 界面;前者提供的是一组简化的缺省选项卡,但在其他方面与性能分析器完全相同。
线程分析器 GUI 具有菜单栏、工具栏和包含各种选项卡的拆分窗格(不同选项卡对应不同的显示)。在左窗格上,缺省情况下显示以下三个选项卡:
Races(争用)选项卡显示在程序中检测到的数据争用的列表。缺省情况下此选项卡处于选中状态。
“双重数据源”选项卡显示对应于所选数据争用的两次访问的两个源位置。突出显示其中发生数据争用访问的源代码行。
“试验”选项卡显示实验中的装入对象,并列出错误和警告消息。
在线程分析器显示屏的右窗格上,显示以下两个选项卡:
“摘要”选项卡显示有关在 Races(争用)选项卡中选择的数据争用访问的摘要信息。
Race Details(争用详细信息)选项卡显示有关在 Races(争用)选项卡中选择的数据争用跟踪的详细信息。
另一方面,er_print 实用程序提供命令行界面。在使用 er_print 实用程序检查争用时,以下子命令很有用:
-races:它报告实验所显示的任何数据争用。
-rdetail race_id:它显示有关具有指定 race_id 的数据争用的详细信息。如果指定的 race_id 为 "all",将显示有关所有数据争用的详细信息。
-header:它显示有关实验的描述性信息,并报告所有错误或警告。
有关更多信息,请参阅 collect.1、tha.1、analyzer.1 和 er_print.1 手册页。