欢迎来到天天文库
浏览记录
ID:6425344
大小:236.00 KB
页数:11页
时间:2018-01-13
《哈工大_软件学院_《并行程序设计》课程实验报告之二》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《并行程序设计》课程实验报告实验2:基于WindowsThread和OpenMP的多线程编程姓名***院系软件学院学号**********任课教师张伟哲指导教师苏统华实验地点软件学院五楼机房实验时间2015年4月8日实验课表现出勤、表现得分实验报告得分实验总分操作结果得分一、实验目的要求:需分析本次实验的基本目的,并综述你是如何实现这些目的的?一、1.熟练掌握C++语言;。2、掌握VisualStudio*.NET*集成开发环境的使用;3、掌握Windows32ThreadAPI开发多线程程序;4、掌握Windows32Thread
2、API中互斥机制的使用方式二、1.掌握OpenMP的基本功能、构成方式、句法;2、掌握OpenMP体系结构、特点与组成;3、掌握采用OpenMP进行多核架构下多线程编程的基本使用方法和调试方法。二、实验内容该部分填写在实验过程中,你都完成了哪些工作。一、1.定位到文件夹Win32ThreadsHelloThreads,用MicrosoftVisualstudio打开文件HelloThread.sln,编译并运行程序;2.对main.cpp中函数进行修改,要求输出线程创建顺序(例如:HelloThread0,HelloThread
3、1,HelloThread2等等);注意:利用CreateThread()循环变量作为每个线程的执行顺序唯一标识3.编译并多次运行程序,记录线程执行顺序,分析线程程序执行顺序是否不可预见及其产生原因4.定位到文件夹Win32ThreadsPi,用MicrosoftVisualstudio打开文件Pi.sln,编译并运行程序;5.对此串行代码使用Windows32ThreadAPI进行线程化,要求4线程实现,且每次迭代计算仅由一个线程完成6.使用CRITICAL_SECTION机制和Semaphors机制对多线程共享变量进行互斥操
4、作,避免数据竞争。二、1、关闭病毒扫描和监控程序;2、采用MicrosoftVisualStudio工具打开实验程序文件:/Helloworlds/Helloworlds.c;3、编译,运行程序并记录实验结果;4、在源程序代码中的找到主程序体:printf("HelloWorld");for(i=0;i<6;i++)printf("Iter:%d",i);;加上#pragmaompparallel{}段5、采用/Qopenmp重新编译程序(使用Intel编译器,通过Intel命令窗口进入)C:>icl/QopenmpHel
5、loWorlds.c;6、设定Openmp线程数:C:>SetOMP_NUM_THREADS=2;7、重新运行程序,观测实验结果,并记录。实验二积分方法求PI值的并行处理化算法1、关闭病毒扫描和监控程序;2、采用MicrosoftVisualStudio工具打开实验程序文件:/pi/pi.sln;3、编译,运行程序并记录实验结果;4、在源程序代码中的找到主程序体中进行omp方式优化5、采用/Qopenmp重新编译程序;三、实验结果记录实验结果。2.1一、(1)直接编译运行:(2)打印数值(3)每次打印10个Hello,会发现明显的
6、乱序执行现象(4)运行程序(5)使用下面的多线程代码进行计算#include#includeCRITICAL_SECTIONcSection;constintnumThreads=4;staticlongnum_steps=100000;doublestep,pi;doublex,sum=0.0;DWORDWINAPIhelloFunc(LPVOIDpArg){ints=*(int*)pArg;step=1.0/(double)num_steps;for(inti=s;i7、+){x=(i+0.5)*step;EnterCriticalSection(&cSection);sum=sum+4.0/(1.0+x*x);LeaveCriticalSection(&cSection);}return0;}voidmain(){InitializeCriticalSection(&cSection);HANDLEhThread[numThreads];inttNum[numThreads];for(inti=0;i8、eThread(NULL,512,helloFunc,(void*)&tNum[i],0,NULL);}WaitForMultipleObjects(numThreads,hThread,TRUE,INFINITE);pi=step*
7、+){x=(i+0.5)*step;EnterCriticalSection(&cSection);sum=sum+4.0/(1.0+x*x);LeaveCriticalSection(&cSection);}return0;}voidmain(){InitializeCriticalSection(&cSection);HANDLEhThread[numThreads];inttNum[numThreads];for(inti=0;i8、eThread(NULL,512,helloFunc,(void*)&tNum[i],0,NULL);}WaitForMultipleObjects(numThreads,hThread,TRUE,INFINITE);pi=step*
8、eThread(NULL,512,helloFunc,(void*)&tNum[i],0,NULL);}WaitForMultipleObjects(numThreads,hThread,TRUE,INFINITE);pi=step*
此文档下载收益归作者所有