的自动并行功能

上传人:j****9 文档编号:54357050 上传时间:2018-09-11 格式:PPT 页数:27 大小:616.50KB
返回 下载 相关 举报
的自动并行功能_第1页
第1页 / 共27页
的自动并行功能_第2页
第2页 / 共27页
的自动并行功能_第3页
第3页 / 共27页
的自动并行功能_第4页
第4页 / 共27页
的自动并行功能_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《的自动并行功能》由会员分享,可在线阅读,更多相关《的自动并行功能(27页珍藏版)》请在金锄头文库上搜索。

1、2018年9月11日,1,MIPSpro 的自动并行功能 MIPSpro Auto-Parallelizing Option(APO),么石磊SGI Asia-Pacific Technology Network Beijing, PRC,2018年9月11日,2,APO概述,MIPSpro APO是MIPSpro编译器的扩展,并融合到其中 MIPSpro APO 不是源到源的预编译器 不需要或很少需要人为的干预,2018年9月11日,3,激活APO,使用-apo选项 使用-pfa选项f77 options -apo list|keep -mplist filenamef90 options

2、-apo list|keep filenamecc options -apo list|keep -mplist filenameCC options -apo list|keep filename,2018年9月11日,4,Options,-apo -apo list产生.l文件 -apo keep产生.l,.w2f.f或.w2c.c,.m,和 .anl文件 -mplist 产生.w2f.f或.w2c.c文件,2018年9月11日,5,APO注意事项,APO只能用于-n32, -64和-n64的编译器 如果分别链接,命令行需要下列选项之一-apo,-mp 下面选项不能同时使用:-apo ke

3、ep-mplist,2018年9月11日,6,APO的输出文件,.l文件 .w2f.f文件和.w2c.c文件 .m文件和.anl文件,2018年9月11日,7,Example,2018年9月11日,8,.l文件,2018年9月11日,9,.w2f.f文件和.w2c.c文件,2018年9月11日,10,.m文件和.anl文件,2018年9月11日,11,程序运行,设置环境变量:setenv OMP_DYNAMIC FALSEsetenv OMP_NUM_THREADS n,2018年9月11日,12,MIPSpro APO 的辅助功能,辅助APO的方法 自动并行编译制导语句,2018年9月11日

4、,13,为什么APO需要辅助?,实际编程中不利于自动并行的问题: 循环中调用函数 循环中使用GOTO语句 不明确的数组下标,2018年9月11日,14,辅助APO的方法,改动程序结构,使之便于APO编译器分析 在源程序中加入人工并行制导语句(manual parallelization directives) 在源程序中加入自动并行编译制导语句(automatic parallelization compiler directives),2018年9月11日,15,自动并行编译制导语句,C*$*NO CONCURRENTIZE C*$*CONCURRENTIZE C*$*ASSERT DO(C

5、ONCURRENT) C*$*ASSERT DO(SERIAL) C*$*ASSERT CONCURRENT CALL C*$*ASSERT PERMUTATION C*$*ASSERT DO PREFER(CONCURRENT) C*$*ASSERT DO PREFER(SERIAL),2018年9月11日,16,C*$*NO CONCURRENTIZE,作用:阻止循环并行执行,其作用域取决于其所在的位置: 位于子程序或函数中 位于子程序或函数外,2018年9月11日,17,C*$*CONCURRENTIZE,作用:克服C*$*NO CONCURRENTIZE的影响 用法:放在子程序内,指明

6、该子程序内部的循环需并行执行,2018年9月11日,18,C*$*ASSERT DO(CONCURRENT),作用:指定下面的循环并行执行 注意事项: 使用不当可能会产生错误的执行码 对于一个循环内部的多个循环,该语句指定紧随其后的循环并行执行 如果指定一个内部循环并行执行,编译器可能将该循环提到最外层 不影响编译器对循环内CALL的分析 该语句在不使用-apo选项时仍然起作用 如果存在明显的依赖关系,编译器将忽略该语句,2018年9月11日,19,Example for C*$*ASSERT DO(CONCURRENT),C*$*ASSERT DO(CONCURRENT)DO I = 1,

7、NA(I) = A(I + M)END DO,2018年9月11日,20,C*$*ASSERT DO(SERIAL),作用:指定紧随其后的循环串行执行,对其它循环不起作用,2018年9月11日,21,C*$*ASSERT CONCURRENT CALL,作用:忽略循环内CALL调用对并行处理的影响 注意事项: 作用域:作用于紧随其后的循环及该循环内部的所有循环 使用不当可能会产生错误的执行码 该语句在不使用-apo选项时仍然起作用,2018年9月11日,22,Example for C*$*ASSERT CONCURRENT CALL,C*$* ASSERT CONCURRENT CALLDO

8、 I = 1, MCALL FRED(B, I, T)CALL WILMA(A, I, T)END DOSUBROUTINE FRED(B, I, T)REAL B(*)T = B(I)ENDSUBROUTINE WILMA(A, I,T)REAL A(*)A(I) = TEND,2018年9月11日,23,Example for C*$*ASSERT CONCURRENT CALL,C$ DOACROSS SHARED(A,B), LOCAL(I,T) C*$* ASSERT CONCURRENT CALLDO I = 1, MCALL FRED(B, I, T)CALL WILMA(A,

9、I, T)END DOSUBROUTINE FRED(B, I, T)REAL B(*)T = B(I)ENDSUBROUTINE WILMA(A, I,T)REAL A(*)A(I) = TEND,2018年9月11日,24,C*$*ASSERT PERMUTATION,用法: C*$*ASSERT PERMUTATION(arr) 作用:为编译器指明数组arr的每个元素都有不同的值 注意事项: 作用域:整个子程序内部 该语句在不使用-apo选项时仍然起作用,2018年9月11日,25,Example for C*$*ASSERT PERMUTATION,SUBROUTINE SUB1DO

10、I = 1, NA(IB(I) = END DO C*$*ASSERT PERMUTATION(IB)DO I = 1, NA(IB(I) = END DOEND,2018年9月11日,26,C*$*ASSERT DO PREFER(CONCURRENT),作用:建议编译器对该语句后面的循环进行并行处理 注意事项: 不会因为该语句的存在而对不安全的循环进行并行处理 优先并行紧随其后的循环 如果编译器认为该语句指定的循环不能安全并行,则考虑并行处理后面的循环 如果指定一个内部循环并行执行,编译器可能将该循环提到最外层,2018年9月11日,27,C*$*ASSERT DO PREFER(SERIAL),作用:该语句建议编译器对紧随其后的循环进行串行处理,DO I = 1, M C*$* ASSERT DO PREFER (SERIAL)DO J = 1, NA(I, J) = B(I, J)END DOEND DO,2018年9月11日,28,Summary,APO的优点: 简单易学,使用方便 对程序改动小,或不需要改动APO的不足: 并行效率取决于程序的结构,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号