欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    多核多线程技术OpenMP-实验报告2.docx

    • 资源ID:6680529       资源大小:26.81KB        全文页数:6页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    多核多线程技术OpenMP-实验报告2.docx

    实验二:QRenMP多线程编程模块一:根底练习3编译执行,执行结果:简答与思考:1写出关键的并行代码(1)四个线程各自执行6次迭代。#indude"stdafx.h"#include<omp.h>int.tmain(intargcf_TCHAR*argv)Printf("HelloWorldn');#pragmaompparallelfor(inti=0;i<6;i+)printf(nIter%dThread%dnlomp_get_thread_numO);Printf("GoodByeWorldn');returnO;(2)四个线程协同完成6次迭代。#indude"stdafx.h"#include<omp.h>int.tmain(intargcf_TCHAR*argv)Printf("HelloWorldn");#pragmaompparallel#pragmaompforfor(inti=0;i<6;i+)printf("Iter:%dThread%dn",i,omp_get一thread_numO);Printf("GoodByeWorldn');returnO;2附加练习:(1)编译执行下面的代码,写出两种可能的执行结果。iti=OJ二0;#Pragmaompparallelforfor(i=2;i<7;i+)for(j-3;j<5;j+)Printfri=%d,j=%dn",i,j);可能的结果:1种2种i=2,j=3i=2,j=3i=2,厘i=2,ji=3sj=3i=3,j=3i=3sRi=3,Ii=6sj=3i=5,j=3i=6,厘i=5,ji=4,j=3i=5,j=3i=4,Ri=5?Ii=5sj=3i=6,j=3i=5,厘i=6,j(2)编译执行下面的代码,写出两种可能的执行结果。inti=0,j=0;for(i=2;i<7;i+)#pragmaompparallelforfor(j=3;jv5;j+)Printfri=%d,j=%dn",i,j);可能的结果:1种2种i=2,j=3i=3j=3i=2,j=4i=2,曰i=3,j=3i=3,曰i=3,jEi=3,尸3i=4,j=3i=4,j=3i=4,j=4i=4,j=4i=5,j=3i=5,j=4i=5,j=4i=5,j=3i=6,j=3i=6,j=3MjEi=6,j=4(3)分析上述两段代码的不同并行效果。1).代码,"#pragmaompparallelfor*为并行区域只对外层循环起作用,因此外层循环/值出现的比拟随机。而"#PragmaOmPparaIIelfor*对内层的循环不起作用,执行方式仍然是串行方式,于是内层循环的出现还是固定的先3后4。2).代码"#Pragmaompparallelfor*只对内层循环起作用,对外层循环不起作用,因此外层循环是串行方式执行的,内层循环是多个线程共同并发执行的。因此/值的出现是随机的,J值的出现是有序的.3实验总结。对于嵌套循环的,并行的结果只与并行化作用的循环有关,在每一个并行执行线程的内部,程序是继续按照顺序执行的。模块二:数值积分计算Pi值3编译执行,计算执行时间为:11.2000OOS6编译执行,计算执行时间为:5.1920OoS7加速比(写出计算公式):11.200/5.1922.1578并行效率(写出计算公式):2.157/4*(100%)/54%简答与思考:1如何进行并行化的?为什么?for循环被多个线程协同执行,因此变量X为多个线程的共享变,需要被私有化;s也是多个线程的共享变,也需要被私有话,但是SMS由于功能和效率的需要,最终结果需要相加,因此用reduction(+:Sum),reduction会为每个线程创立一个私有的st装的副本,最终结果相加并且返回到孔m关键代码:(黄色局部已标记)/OpenMPPi.cpp:定义控制台应用程序的入口点。#include*stdafx.h*ttinclude<timeh>include<omp.h>Ionglongnumsteps=I000000000;doublestep;intmain()clock_tstart,stop;doublex,pi,sum=0.0;inti;step=I./(doub1e)num_steps;start=clock();pragmaompparalIelforreduction(+:sum),private(x)for(i=0;Knumsteps;i+)x=(i+.5)*step;sum+=4.0/(1.+x*x);pi=sum*step;stop=clockO;printf(*ThevalueofPIis%15.12fn*,pi);printf(*ThetimetocalculatePlwas%fSeCondSn",(double)(stop-start)/1000.0);return0;2是否可以对该并行化方案进行进一步的优化?如何优化?效果如何?还可以在SUE+=4.0/(1.+x*x);前面加上事件机制OPenMP临界区的编译指导语句#PragmaompCritiCal,但这样优化和采用规约的执行效果是一样的。3是否有其他并行化方案?如何并行?效果如何?暂时没想到其他进一步优化方案。4实验总结当开发OPenMP程序时,针对出现在并行段的变,尤其是共享变,程序开发人员有必要告诉编译器那些变可以保持它的共享性,哪些变必须要转化为私有的。模块三:MonteCarlo计算Pi值2编译执行,Pi的值为:Pi=3.141821200计算执行时间为:SeCondS=4.5230000005编译执行,Pi的值为:Pi=3,141525100计算执行时间为:SeCondS=2.1880000006加速比(写出计算公式):4,523/2.1882.0677并行效率(写出计算公式):2.067/4*(100%)兰51.680%简答与思考:1如何进行并行化的?为什么?for循环被多个线程协同执行,因此变*,“fc"e期为多个线程的共享变,需要被私有化;dUnderCurve也是多个线程的共享变,也需要被私有话,但是(JUnderCurve值由于功能和效率的需要,最终结果需要相加,因此用reduction(+EUnderCurve),reduction会为每个线程创立一个私有的(JUnderCurve变的副本,最终结果相加并且返回到dUnderCurve。同时要注意的是i和j也是每个线程各自的私有变,在一个线程对其操作是不允许其他线程的干扰,所以把其包含在#PragmaOmPfor指导语句中关键代码:(已用黄色局部标记)#inc1ude*stdafX.h"#include<stdibh>0include<time.h>/VSLVariables#include*mkl_vsl.h"defineBRNGVSL_BRNG_MCG31defineMETHOD0MefineBLOCK_SIZE500int_tmain(intargc,_TCHAR*argv)Unsignedintiter=200000000;doublex;doubley;doub1edl)nderCurve=0.0;doublePi=O+0;douhleend-time1.start_time;starttime=clock();/youneedaprivatecopyofwholearrayforeachthreadVSLStFeamStatePtrstream;/Youneedonestreamforeachthreadpragmaompparallelprivate(xfy,stream)reduction(+:dUnderCurve)doub1erBLOCK_SIZE*2;/Carefu1111vs1NewStream(&strearn,BRNGt(int)clock();pragmaompforfor(intj=0;j<iter/BLOCK_SIZE;j÷÷)串dRngUrIiform(METHOD>stream,BL0CK_SIZE*2,r>0.0,L0):/Createrandomnumbersintoarrayrfor(inti=O;i<BLOK_SIZE:i+)x=ri;/XCoordinatey=ri+BLOCK_SIZE;/YCoordinateif(x*x+y*y<=L0)dUnderCurve+:/isdistancefromOriginunderCurveVslDeleteStream(stream);pi二dUnderCurve/(double)iter*4:end_time=c1ockO;printf(*pi二10*9frpi):printf(*Secods=%10.9fn*5(double)(end_time-start_time)/1000.0);return0;2是否可以对该并行化方案进行进一步的优化?如何优化?效果如何?逐可以在dUnderCurve+;前面加上事件机制OPenMP临界区的编译指导语句#PragmaOmPCriti81,但这样优化和采用规约的执行效果是一样的。3是否有其他并行化方案?如何并行?效果如何?暂时没想到其他进一步优化方案。4实验总结通过本次试验我的收获还是很多的比方掌握了OPenMP的根本功能、构成方式、句法及OPenMP体系结构、特点与组成以及采用OPenMP进行多线程编程的根本使用和调试方法。

    注意事项

    本文(多核多线程技术OpenMP-实验报告2.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开