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

哈工大软件学院并行程序设计课程实验报告之二.doc

哈工大软件学院并行程序设计课程实验报告之二.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
哈工大软件学院并行程序设计课程实验报告之二

《并行程序设?计》课程实验报?告 实验2:基于Win?dows Threa?d和Ope?nMP的多?线程编程 姓名 *** 院系 软件学院 学号 ********** 任课教师 张伟哲 指导教师 苏统华 实验地点 软件学院五?楼机房 实验时间 2015年?4月8日 实验课表现? 出勤、表现得分 实验报告 得分 实验总分 操作结果得?分 一、实验目的 要求:需分析本次?实验的基本?目的,并综述你是?如何实现这?些目的的? 一、 1.。ual Studi?o* .NET*集成开发环?境的使用; 3、掌握Win?dows3?2 Threa?d API开发?多线程程序?; 4、掌握Win? 二、 .掌握Ope?; 掌握Ope?;掌握采用O?penMP?一、 2 Threa?ds\ Hello?Threa?ds\,用Micr?osoft? Visua?l studi?o打开文件?Hello?Threa?d.sln,编译并运行?程序; 2. 对main?.cpp中函?数进行修改?,要求输出线?程创建顺序?(例如:Hello? Threa?d 0, Hello? Threa?d 1, Hello? Threa?d 2 等等); 注意:利用Cre?ateTh?read()循环变量作?为每个线程?的执行顺序?唯一标识 3. 编译并多次?运行程序,记录线程执?行顺序,分析线程程?序执行顺序?是否不可预?见及其产生?原因 4. 定位到文件?夹Win3?2 Threa?ds\ Pi\,用Micr?osoft? Visua?l studi?o打开文件?Pi.sln,编译并运行?程序; 5. 对此串行代?码使用Wi?ndows?32 Threa?d API进行?线程化,要求4线程?实现,且每次迭代?计算仅由一?个线程完成? 6. 使用CRI?TICAL?_SECT?ION机制?和Sema?phors?机制对多线?程共享变量?进行互斥操?作,避免数据竞?争。 二、 rosof?t Visua?l Studi?o工具打开?实验程序文?件: /Hello?world?s/Hello?world?s.c; 3、编译,运行程序并?记录实验结?果; 4、在源程序代?码中的找到?主程序体: print?f(Hello? World?\n); for(i=0;i6;i++) print?f(Iter:%d\n,i);; 加上#pragm?a omp paral?lel { }段 5、采用/Qopen?mp重新编?译程序(使用Int?el编译器?,通过Int?el命令窗?口进入) C:\icl /Qopen?mp Hello?World?s.c; 6、设定Ope?nmp线程?数: C:\Set OMP_N?UM_TH?READS?=2; 7、重新运行程?序,观测实验结?果,并记录。 实验二 积分方法求?PI值的并?rosof?t Visua?l Studi?o工具打开?实验程序文?件: /pi/pi.sln; 3、编译,运行程序并?记录实验结?果; 4、在源程序代?码中的找到?主程序体中?进行omp?方式优化 5、采用/Qopen?mp重新编?译程序; 三、实验结果 记录实验结?果。 2.1 一、 (1) 直接编译运?行: (2) 打印数值 (3) 每次打印1?0个 Hello? ,会发现明显?的乱序执行?现象 (4) 运行程序 (5) 使用下面的?多线程代码?进行计算 #inclu?de windo?ws.h #inclu?de stdio?.h CRITI?CAL_S?ECTIO?N cSect?ion; const? int numTh?reads? = 4; stati?c long num_s?teps=10000?0; doubl?e step, pi; doubl?e x, sum = 0.0; DWORD? WINAP?I hello?Func(LPVOI?D pArg) { int s = *(int *)pArg; step = 1.0/(doubl?e) num_s?teps; for (int i=s; i s + 25000?; i++){ x = (i+0.5)*step; Enter?Criti?calSe?ction?(cSect?ion); sum = sum + 4.0/(1.0 + x*x); Leave?Criti?calSe?ction?(cSect?ion); } retur?n 0; } void main() { Initi?alize?Criti?calSe?ction?(cSect?ion); HANDL?E hThre?ad

文档评论(0)

seunk + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档