Sun Studio 12:线程分析器用户指南

附录 B 线程分析器常见问题

本节包括常见问题及其解答的列表。有关对此常见问题的最新更新,请参见Sun Developer Network

B.1 常见问题

问题:

为什么行号信息不正确?

答案:

尝试关闭优化,或指定级别 -x03 或更低。编译器的优化变换可能会使行号信息失真,并使实验结果变得难以阅读。

问题:

我是否真的需要安装 collect 命令缺少的修补程序?

答案:

是。确保实验系统安装了所有必需修补程序。如果缺少任何必需的修补程序,则实验结果可能会不正确。

问题:

是否可以使用我的代码链接 malloc() 库的归档版本?

答案:

否。线程分析器放在 malloc() 例程上,因此链接 malloc() 库的归档版本可能会导致误报数据争用。

问题:

线程分析器是否可以检测 OpenMP 应用程序中的数据争用?对于 POSIX 或 Solaris 线程应用程序又怎么样呢?

答案:

线程分析器可以检测在使用 POSIX 线程 API、Solaris 操作系统(R) 线程 API、OpenMP 指令、Sun 并行指令、Cray(R) 并行指令或这些项的混合编写的代码中发生的数据争用。

问题:

线程分析器是否可以检测不同进程之间的数据争用?

答案:

还不可以。当前,它仅检测从一个进程产生的不同线程之间的数据争用。

问题:

线程分析器是否能够找出所有数据争用?

答案:

否。线程分析器在运行时检测数据争用,应用程序的确切运行时行为取决于输入数据集。特定的输入数据集可能并不导致数据争用。线程分析器按高级别模拟线程之间的并发性,以便最大限度地减少操作系统调度的影响。但是,操作系统调度仍可以影响内存分配和存储重用,而这会使潜在的数据争用发生变化。

将线程分析器与不同数目的线程和不同的输入数据集一起使用,并对单个数据集重复实验,以最大限度地增加该工具检测数据争用的可能性。

问题:

为什么在不同的运行中线程分析器提供的数据争用结果是不同的?

答案:

之所以出现此现象,是因为运行之间存在计时差异。在不同运行中线程按不同的顺序访问内存时,将会报告不同的数据争用结果。

问题:

为什么线程分析器报告在我的应用程序中不存在的数据争用?如何删除它们?

答案:

在一些情况下,线程分析器可能会报告在程序中从未实际发生过的数据争用。这种情况称为误报,它们通常在使用用户实现的同步或在线程之间再循环内存时发生。例如,如果代码包括实现旋转锁的手动编码程序集,则线程分析器将无法识别这些同步点。有关误报的详细说明以及如何通过 API 调用删除它们的示例,请参见教程。

问题:

什么是 librdthooks.so?它有何作用?

答案:

librdthooks.so 是满足数据争用检测校验调用和用户 API 调用的入口点的库。编译程序并将其与 -xinstrument=datarace 链接时,将自动链接它。有关更多信息,请参见 librdthooks(3) 手册页。

问题:

我如何知道可执行文件或库是否已经过校验?

答案:

使用 nm。有关更多详细信息,请参见 nm(1) 手册页。如果找到全局未定义符号 __rdt_src_read__rdt_src_write,则可执行文件或库已经过校验。

问题:

是否可以使用分析器读取数据争用实验?

答案:

可以,分析器显示所有的传统性能分析选项卡,以及新增的 Races(争用)、Races Source(争用源)和 Race Details(争用详细信息)选项卡。线程分析器界面经过了简化,不显示传统的分析器选项卡。

问题:

为什么将它与 C、C++ 或 F90 一起使用时,出现一条错误消息,指出编译器选项 -xinstrument=datarace 是错误的?

答案:

您使用的是不支持线程分析器的旧版本 Sun Studio。通过输入以下内容,检查您所使用的 Sun Studio 版本:cc -Version。必须使用 2006 年 6 月以后的版本。

问题:

为什么使用 er_print 实用程序时出现一条错误消息,指出争用命令无效?

答案:

您使用的是不支持线程分析器的旧版本 Sun Studio。通过输入以下内容,检查您所使用的 Sun Studio 版本:er_print -V。必须使用不早于 2006 年 6 月的版本。

问题:

为什么在运行 collect -r 时出现一条错误消息,指出无法识别 -r?

答案:

您使用的是不支持线程分析器的旧版本 Sun Studio。通过输入 collect -V 检查您所使用的 Sun Studio 版本。必须使用不早于 2006 年 6 月的版本。

问题:

如何报告错误或与他人共享我的线程分析器体验?

答案:

将您的反馈与线程分析器工程师和用户共享的最佳方法是,读取并张贴到 Sun Studio 工具论坛。您可能会发现已经解答了您的问题。