网站大量收购独家精品文档,联系QQ:2885784924

《并行程序设计》实验指导书之三.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

《并行程序设计》实验指导书之三

实验3.1IntelParallelInspectorXE实验

实验目的

1.掌握IntelParallelInspectorXE的基本功能、使用方法;

2.掌握多线程程序设计的基本调试方法;

3.掌握采用IntelParallelInspectorXE进行多线程程序调试的基本方法和步骤。

实验要求

1.熟练掌握C/C++语言。

2.掌握VisualStudio*.NET*集成开发环境的使用;

3.并行技术的基本概念;

4.多线程程序设计基础;

5.IntelParallelInspectorXE基础。

实验原理

前面的实验介绍了并行化代码的4个步骤:分析、实现、调试和调优。在调试阶段必须检查是否在程序中引入了任何并行类型的错误。这就要通过IntelParallelInspectorXE来实现。它能检查出线程化和内存分配的错误,通常使用被测试代码的未优化版本,数据竞争和死锁错误都能被检测和定位。当InspectorXE启动一个应用程序时,它首先对二进制代码插入具有测量功能的代码,然后记录运行信息。

当InspectorXE执行代码时,即使一个潜在的错误在运行时没有真的发生,它也会被标记出来。例如,代码中有死锁的可能但死锁在此次运行中并没有发生,InspectorXE仍然会识别出这个潜在的问题并报告。

InspectorXE报告如下类型的错误和警告:

线程错误:数据竞争、死锁、锁的层次冲突、潜在的私有性问题、其他线程化的信息等;

内存泄漏:GDI资源泄漏、不正确的memcpy调用、无效的内存释放、无效的内存访问、内核资源泄漏、内存泄漏、未初始化内存的访问、未初始化的部分内存访问等。

InspectorXE报告的一些错误有可能是虚警,也就是不是真正的错误,但工具软件将它们当作是错误。对于这种情况,可以把一些错误添加到抑制文件中,这样在后续执行时就会将其忽略。

实验内容

一、检测和消除死锁

1.拷贝3-1中的源代码pi.cpp到vs里的c++项目中;

2.打开IntelParallelStudioXE的命令提示符窗口;

3.使用下面的命令编译程序:

icl/Od/Qopenmp/Zipi.cpp-opi.exe

4.运行程序:

pi.exe

可以看到程序被挂起。

检测和修复死锁

5.启动InspectorXEGUI

6.新建一个项目TEST

单击File–New–Project

在项目属性对话框中填写程序相关细节

7.进行死锁检测分析

单击File–New–Analysis

选中死锁检测分析(DetectDeadlocks)

确定TerminateonDeadlocks选项框被选中

单击“开始”按钮

8.在显示完分析结果之后,查看报告,了解出现的问题;

9.消除死锁,修改文件pi.cpp中的第44行和第57行。如下所示:

44:SafeAdd(sum1,sum2,lock1,lock2);

57:SafeAdd(sum1,sum2,lock1,lock2);

10.重新编译应用程序(同步骤3、步骤4),然后运行程序。程序是否能运行到结束而不被挂起?

11.重新运行死锁分析,是否还有错误报告?

二、检测数据竞争

代码pi.cpp中的死锁问题被消除之后,现在进行死锁和数据竞争检测分析来寻找数据竞争问题。步骤和死锁检测分析一样。

继续使用经修改过的代码pi.cpp,假设前面已经完成了死锁的消除

使用下面的命令编译程序:

icl/Od/Qopenmp/Zipi.cpp-opi.exe

设置环境变量OMP_NUM_THREADS为1,多次运行程序pi.exe并记录实验结果

检测和消除数据竞争

使用InspectorXE进行死锁和数据竞争检测分析

单击File–New–Analysis,选择死锁和数据竞争检测分析(DetectDeadlocksandDataRace),单击“开始”按钮

在显示完分析结果之后,查看报告,了解出现的问题;

消除数据竞争问题,将pi.cpp文件中的第31行修改如下:

31:#pragmaompparallelsectionsprivate(x1,x2,sum1,sum2)

8.重复步骤2~5以确认消除了数据竞争问题。

三、检测内存错误

InspectorXE中有以下3种预定义的分析类型用于寻找内存错误

(1)内存泄漏——使用它能检测到有哪些内存或者资源分配了之后再也没有释放的错误。这是最小范围的分析,并且它对代码的影响也最小。对于大型应用来说,开始时最好使用这种类型的分析;

(2)检测内存问题——使用它

文档评论(0)

155****4925 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档