哈工大_软件学院_《并行程序设计》课程实验报告之三

哈工大_软件学院_《并行程序设计》课程实验报告之三

ID:14428802

大小:968.50 KB

页数:13页

时间:2018-07-28

哈工大_软件学院_《并行程序设计》课程实验报告之三_第1页
哈工大_软件学院_《并行程序设计》课程实验报告之三_第2页
哈工大_软件学院_《并行程序设计》课程实验报告之三_第3页
哈工大_软件学院_《并行程序设计》课程实验报告之三_第4页
哈工大_软件学院_《并行程序设计》课程实验报告之三_第5页
资源描述:

《哈工大_软件学院_《并行程序设计》课程实验报告之三》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、《并行程序设计》课程实验报告实验3:基于IntelThreadChecker和Profiler工具的多线程调试与调优姓名***院系软件学院学号**********任课教师张伟哲指导教师苏统华实验地点软件学院五楼机房实验时间2015-4-15实验课表现出勤、表现得分实验报告得分实验总分操作结果得分一、实验目的要求:需分析本次实验的基本目的,并综述你是如何实现这些目的的?(1)掌握IntelThreadChecker的基本功能、使用方法(2)掌握多线程程序设计的基本调试方法(3)掌握采用IntelThreadChecker进行多线程程序调试的基本方法和步骤(4)掌

2、握IntelThreadProfiler的基本功能、使用方法(5)掌握多线程程序设计的基本调试方法(6)掌握采用IntelThreadProfiler进行多线程程序调试的基本方法和步骤二、实验内容该部分填写在实验过程中,你都完成了哪些工作。一、分析程序中潜在的数据竞争二、分析程序死锁问题三、线程安全性测试问题分析四、IntelThreadProfiler基础五、负载平衡(LoadBalance)问题分析六、同步竞争问题分析三、实验结果记录实验结果;针对指导书中的提问,给出解答。一、1.(1)运行结果(2)运行结果:VTune诊断结果①程序中,哪些变量可以作为线

3、程中的共享变量?r和round可以作为共享变量,这两个变量在线程运行前就已经确定,并且不会再变化。②哪些变量应该作为每个线程的私有变量?线程内部定义的i,j,start,end,tid等变量属于私有变量、③哪些变量出于线程的同步必须予以保护?distx,disty,distz,dist和pot出于线程同步的原因必须予以保护。使用临界区对数据进行保护:EnterCriticalSection(&cs);distx=pow((r[0][j]-r[0][i]),2);disty=pow((r[1][j]-r[1][i]),2);distz=pow((r[2][j]-

4、r[2][i]),2);dist=sqrt(distx+disty+distz);pot+=1.0/dist;LeaveCriticalSection(&cs);不再有冲突现象。把粒子和循环量改成之前单线程程序potential的数量,重新编译运行。运行结果如下可见运行结果与单线程程序是一样的,但是相对单线程程序相比,性能提升不明显,主要原因是线程之间大量的发生竞争。(2)1.运行结果VTune诊断结果:分析:为什么不是每次都出现死锁问题?死锁需要两个线程相互持有mutex同时请求对方持有的mutex,然后线程的执行顺序是不确定的,因此并不是每次执行都会出现死

5、锁。改动代码如下:DWORDWINAPIwork0(void*arg){Sleep(5000);EnterCriticalSection(&cs0);globalX++;EnterCriticalSection(&cs1);globalY++;LeaveCriticalSection(&cs1);LeaveCriticalSection(&cs0);return0;}DWORDWINAPIwork1(void*arg){EnterCriticalSection(&cs0);globalX++;EnterCriticalSection(&cs1);globalY

6、++;LeaveCriticalSection(&cs1);LeaveCriticalSection(&cs0);return0;}intmain(intargc,char*argv[]){HANDLEh[2];DWORDrc;InitializeCriticalSection(&cs0);InitializeCriticalSection(&cs1);printf("START");h[0]=CreateThread(0,0,work0,NULL,0,NULL);h[1]=CreateThread(0,0,work1,NULL,0,NULL);rc=Wa

7、itForMultipleObjects(2,h,TRUE,INFINITE);printf("TOTAL=(%d,%d)",globalX,globalY);printf("STOP");getchar();DeleteCriticalSection(&cs0);DeleteCriticalSection(&cs1);}再次运行:使用VTune,诊断结果已经正常:(3)直接运行使用OpenMP优化后,出现读写冲突:更改代码#pragmaompsections{#pragmaompsectionfor(t=-2;t<19;t++){if(!gray_c

8、ode(t,gc))printf("%

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。