| 2009年06月25日 09:00 | |
简介:
英特尔® Parallel Inspector 能够分析二进制代码来查找线程错误。然而,在编译程序时使用适当的编译器设置可使分析更加容易。
基于本文主旨,下文提及英特尔® Parallel Inspector 时,即指英特尔® Parallel Inspector 中的线程错误分析。
对英特尔 Parallel Inspector 有用的编译器设置:
|
编译选项 |
目的 |
|
/Zi, /ZI |
英特尔 Parallel Inspector 使用编译中产生的符号将地址与源代码行关联起来。 对于线程错误分析,使用此设置将减少误报的发生。 |
|
/Od |
使英特尔 Parallel Inspector更轻松地将错误与相应源代码行关联起来。 英特尔 Parallel Inspector 还可分析优化的二进制代码,但由于优化的汇编程序没有具体的源代码行,因此英特尔 Parallel Inspector 难以精确定位其中造成问题的源代码。并且,优化的编译倾向于将变量保存在寄存器中,以避免出现数据竞争。 注意:虽然对使用 /Od 编译的二进制代码进行分析比较简单,但检查 "released"(非 /Od)版本二进制代码的线程错误也同样重要。 |
|
/MD or /MDd (推荐) |
使用此设置将减少误报。 |
基于使用英特尔编译器编译的 OpenMP* 应用程序,英特尔 Parallel Inspector 所需的编译器设置:
|
编译选项 |
目的 |
|
/Qopenmp (极力推荐) |
如果没有设置这个选项,英特尔 Parallel Inspector 将找不到与OpenMP* pragma 指令相关联的线程中可能存在的数据竞争或死锁。 |
|
/Qopenmp-link:dynamic (推荐) |
在英特尔® 编译器 11.0 和英特尔® Composer 中,此设置选择 OpenMP* 运行库的动态链接版本,该版本已经为Parallel Inspector插入了相应的调试代码。 使用英特尔编译器 11.0 或英特尔 Parallel Composer 时,此项为默认设置。 |
基于使用英特尔® 线程构建模块 (TBB) 的应用程序,英特尔 Parallel Inspector 所需的编译器设置:
|
编译选项 |
目的 |
|
/D "TBB_USE_THREADING_TOOLS" (极力推荐) |
如果没有此设置,英特尔 Parallel Inspector 将在英特尔® TBB 中识别误报。注意:如果使用 /Od 进行编译,此项将被自动设置。 |
在英特尔 Parallel Inspector 中使用线程错误分析时不推荐设置的编译器选项:
|
编译选项 |
目的 |
|
/Qtcheck |
此设置可用来替代英特尔® 线程检查器的调试代码插入。英特尔 Parallel Inspector 并不使用此编译选项。 |
|
/Qopenmp-link:static (请勿使用) |
此设置将英特尔® OpenMP* 库的静态版链接进您的代码中。此静态库不包含避免误报所需的调试代码。 |
|
/Qtprofile (请勿使用) |
此设置可用来替代英特尔® 线程档案器的调试代码插入。英特尔 Parallel Inspector 并不使用此编译选项。 |
|
/Qopenmp_stubs (请勿使用) |
此设置将阻止 OpenMP* 代码实际并行化。 |
|
/debug:parallel (请勿使用) |
此设置为英特尔 Parallel Composer 启用英特尔® Parallel Debugger Extension。它并不用于英特尔 Parallel Inspector。 |
对英特尔 Parallel Inspector 线程错误分析没有影响的编译器设置:
|
编译选项 |
目的 |
|
/FIXED:NO |
此设置对英特尔 Parallel Inspector 而言不是必需的。它是一个连接器选项,在英特尔线程检查器、英特尔线程档案器以及英特尔 VTuneTM 性能分析器调用关系图中,所进行的调试代码插入需要用到它。 |
注意: 英特尔 Parallel Inspector与下列库的动态版本协同工作效果更佳:
•· OpenMP* 运行时库(libiomp5.dll 或 libguide.dll)
•· C 运行时库(msvcr90.dll、msvcr80.dll、msvcr90d.dll 或 msvcr80d.dll)
如果与以下库连接,英特尔 Parallel Inspector 将会报告错误信息:
•· OpenMP* 运行时库 (libiomp5mt.lib、libguide.lib、vcomp.lib/vcomp.dll)
•· C 运行时库 (libcmt.lib)
更多信息:
本文介绍了开发人员最关心的常见编译选项。他们大部分都可用于英特尔 Parallel Inspector,但并未对所有选项组合进行测试。如果您有关于其他选项的信息,或对某个特定选项有疑问,请登录 Intel® Parallel Studio 论坛提交您的信息或问题。
版本:
英特尔® Parallel Inspector
英特尔® Parallel Composer
英特尔® C++ 编译器11.0 Windows* 版
英特尔® C++ 编译器 10.1 Windows* 版
Microsoft* Visual Studio 2005
Microsoft* Visual Studio 2008
如需了解英特尔软件产品相关的性能和优化选项,请参阅优化注意事项.
评论 (21) 
| 2009年04月12日 17:42
王明永 | 我也想知道,为什么没有解答的哪? |
| 2009年04月17日 19:36
nyeboy198826
| 不似乎自带的 |
| 2009年04月19日 17:51
Peter Wang (Intel)
| 推荐使用Release Build, "/Zi" 是需要加的;"/Od" 是需要人工改的;"/MD" 或 "/MDd" 是多线程项目缺省的;"/Qopenmp" 需要用户自己加在编译开关的命令行。 |
| 2009年04月20日 05:49
lichengyong998
|
很具体 |
| 2009年04月24日 21:00
wj2135187 | VS2005没有嵌入Intel编译器,骗人啊? |
| 2009年04月25日 02:43
rong | 不具体 |
| 2009年05月05日 07:19
hbfbi
| 不是很详细啊!! |
| 2009年05月07日 17:58
张夫 | 真的吗? 你呼人哦? |
| 2009年05月11日 05:37
huotui88
| 不太了解 |
| 2009年05月12日 05:29
??? | 越来越糊涂了! |
| 2009年05月13日 21:59
Peter Wang (Intel)
| 带“/Qxxx”的选项来自英特尔编译器,其他大多是微软的编译器的选项(英特尔编译器也适用)。 |
| 2009年05月15日 07:46
刘阳 | ... |
| 2009年05月20日 18:51
温先辉 | 学习 |
| 2009年05月23日 06:32
y5254yyahoo.com.cn
| 英文的吗 |
| 2009年05月23日 06:36
y5254yyahoo.com.cn
| 好像很麻烦啊 |
| 2009年05月25日 07:24
倪礼 | 则样呀 |
| 2009年05月25日 08:14
倪艳华 | 具体 |
| 2009年05月29日 17:09
阿磊 | 学习 |
| 2009年05月30日 19:20
段志飞 | good |
| 2010年01月02日 18:11
ml_frank
|
good |
引用 (0)
写评论 
穆丽虹 (Intel)
|



nankaiwangxu2009
15