多核实验报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
“多核多线程技术”实验报告 第二章 Windows API多线程编程模型 模块一:基础模块 本模块通过一个简单的Win32 API多线程程序,使初学者明确使用Win32 API编写多线程程序的步骤,并且掌握Microsoft Visual Studio 2010的基本用法。 (2)串行代码输出结果: 简答与思考 (1)修改后的HelloThreads的代码: #include stdafx.h #include windows.h const int numThreads = 4; DWORD WINAPI helloFunc(LPVOID pArg) { int j = *(int *)pArg; printf(Hello Thread %d\n,j); return 0; } int _tmain(int argc, _TCHAR* argv[]) { HANDLE hThread[numThreads]; int tNum[4]; for (int i = 0; i numThreads; i++) { tNum[i]=i; hThread[i] = CreateThread(NULL, 0, helloFunc, tNum[i], 0, NULL ); } WaitForMultipleObjects(numThreads, hThread, TRUE, INFINITE); return 0; } 输出结果: (2)实验总结: 实验结果不定,是随机的,临界资源(互斥资源)。 模块二:临界区模块 本模块将以数值积分的方法计算PI的值,采用Win32 API来实现程序的并行化。 (1)串行程序编译执行,输出结果: (2)改为并行程序编译执行,输出结果: (3)串行程序编译执行,记录结果:PI= 3.141592654 The time of calculation was 11.656000 seconds. (4)并行程序编译执行,记录结果:PI= 3.141592654 The time of calculation was 6.258000 seconds. 加速比: 1.86 ,并行效率: 0.93 简答与思考: (1)如何进行并行化的?请写出并行化代码。 #include stdafx.h #include stdio.h #include windows.h #include time.h static long num_steps=1000000000; const int gNumThreads=2; double step=0.0; double sum=0.0, pi=0.0; CRITICAL_SECTION gCS; DWORD WINAPI threadFunction(LPVOID p) { int myNum=*((int *)p); double sum1=0.0,x; for(int i=myNum;inum_steps;i+=gNumThreads) { x=(i+0.5)*step; sum1=sum1+4.0/(1.0+x*x); } EnterCriticalSection(gCS); sum+=sum1; LeaveCriticalSection(gCS); return 0; } int main() { clock_t start,stop; start=clock(); HANDLE threadHandles[gNumThreads]; int tNum[gNumThreads]; InitializeCriticalSection(gCS); step=1.0/(double) num_steps; for(int i=0;igNumThreads;++i) { tNum[i]=i; threadHandles[i]=CreateThread(NULL,0,threadFunction,tNum[i],0,NULL); } WaitForMultipleObjects(gNumThreads,threadHandles,TRUE,INFINITE); DeleteCriticalSection(gCS); pi=step*sum; stop=clock(); printf(pi=%12.9f\n,pi); printf(The time of calculation was %f seconds\n,((double)(stop-start)/1000.0)); return 0; } (2)在本实验中,哪些变量是需要保护的?采取什么方法实现的? 答:dAl

文档评论(0)

方圆 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档