- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
《并行程序设计》实验指导书之一
实验1.1使用intel编译器生成优质代码
实验目的
1.掌握六步骤的优化过程;
2.掌握利用编译器选项来优化代码;
3.掌握针对不同CPU使用自动向量化进行性能调优;
实验要求
1.熟练掌握C语言;。
2、熟练掌握Intel编译器的使用;
3、熟练掌握nmake程序管理工具。
实验内容
实验步骤:
步骤一:不使用优化技术构建应用程序
1.如果测试的计算机支持TurboBoost或Hyper-Threading技术,最好先关闭它们,否则CPU时钟频率会动态调整。在bios里关闭:重启计算机,开机时按F2进入BIOS设置页面,在advanced里找到cpu电源设置或speedup设置,如果没有,说明计算机不支持TurboBoost及Hyper-Threading,那就不需要修改。
2.在所有程序-IntelParallelStudioXE2015中,打开Intel编译器的命令行提示符窗口。
3.新建一个文件夹,将code1.1文件夹中的代码拷贝进去。
4.用Intel编译器构建intel.noopt.exe应用程序(先清理,再编译):
nmakeclean
nmakeTARGET=intel.nooptCFLAGS=/Od
5.运行intel.noopt.exe程序并且记录执行结果,选取最短时间作为结果进行记录。
步骤二:使用通用优化
1.参考上述命令,用Intel编译器构建应用程序(提示:通用优化的CFLAGS选项是/O1)
2.执行intel.01.exe应用程序并记录运行结果
3.用/O2、/O3、/Ox选项重复1、2步
步骤三:使用处理器相关的优化
在这个步骤中使用自动向量化选项来构建样例应用程序。
1.不使用选项,构建和运行应用程序,这时的结果和步骤二一样。
增加Qvec-到CFLAGS选项中以关闭自动向量化
4.(可选)通过产生向量化报告来查看向量化的差异(CFLAGS为/Qvec-report:2)
增强自动向量化选项
5.使用各种/Qx选项(SSE、SSE3、SSSE3、SSE4.1、SSE4.2、及AVX),
nmakeclean
nmakeCFLAGS=-/QxSSE2target=intel.SSE2
产生可移植的应用,并记录实验结果。
6.使用QaxAVX选项重新构建应用程序
nmakeclean
nmakeCFLAGS=-/QaxAVXtarget=intel.axAVX
7.运行程序,即使所用的CPU不支持AVX,程序也能正常运行,记录实验结果。
步骤四:增加过程间优化
过程间优化(InterproceduralOptimization,IPO)完成对应用程序的静态的拓扑分析。使用/Qip选项将使得分析工作限于同一个源代码内部,使用/Qipo选项则会在命令行列出的所有源代码中展开分析。IPO分析整个程序,对于包含许多频繁调用的中小型函数的程序特别有效。IPO消除或减少重复的计算、低效的内存使用、简化循环。也开展其他优化,例如别名分析、死函数的消除、无用变量的消除、内联函数。IPO能重新编排函数以获得更好的内存布局和局部性。
过程间优化
1.使用/Qipo选项来构建和运行应用程序:
2.记录运行时间
3.重复1、2步,添加使用的平台上最高级别的自动向量化(SSE2、SSE3、SSSE3、SSE4.1、SSE4.2和AVX),记录运行时间
步骤五:性能测评指导的优化
到目前为止,前面的所有优化都是静态的,即分析了代码但是没有运行它们。性能测评指导的优化PGO(Profile-GuidedOptimization)使用动态的方法。用典型数据来运行未经优化的代码一次或多次,每次都收集性能测评的信息。这些测评的信息接着被用于优化以产生最终可执行文件。
使用PGO的3个步骤
打开PGO功能
nmakereallyclean
nmakeCFLAGS=/Qprof-genTARGET=intel.pgo.gen
执行intel.pgo.gen.exe程序,记录实验结果
在所运行的程序的目录下查看,应当能看到刚创建的.dyn文件
重新构建应用程序,告诉编译器需要使用刚才产生的动态信息:
nmakeclean
nmakeCFLAGS=/Qprof-useTARGET=intel.pgo
4.运行intel.gpo.exe,记录实验结果,对比一下性能
步骤六:自动向量化的调优
编译code1.2中的test.cpp程序,要求自动向量化器产生报告:
icl/ctest.cpp/Qvec-report2/c
查看项目目录下的.optrpt文件,找到循环没有向量化的提示信息。
使用GAP,看看能不能提供一些其他
文档评论(0)