资源描述
Subtitle,First level bullet,Second level (dash),Third level (small bullet),Click to edit Master title style,*,*,TM,MIPSpro,的自动并行功能,MIPSpro,Auto-,Parallelizing,Option(,APO),么石磊,SGI Asia-Pacific Technology Network,Beijing, PRC,2024/10/2,1,APO,概述,MIPSpro,APO,是,MIPSpro,编译器的扩展,并融合到其中,MIPSpro,APO,不是源到源的预编译器,不需要或很少需要人为的干预,2024/10/2,2,激活,APO,使用-,apo,选项,使用,-,pfa,选项,f77,options,-,apo,list|keep -,mplist,filename,f90,options,-,apo,list|keep,filename,cc,options,-,apo,list|keep -,mplist,filename,CC,options,-,apo,list|keep,filename,2024/10/2,3,Options,-,apo,-,apo,list,产生.,l,文件,-,apo,keep,产生.,l,.w2f.f,或.,w2c.c,.m,,和 .,anl,文件,-,mplist,产生.,w2f.f,或.,w2c.c,文件,2024/10/2,4,APO,注意事项,APO,只能用于-,n32, -64,和-,n64,的编译器,如果分别链接,命令行需要下列选项之一,-,apo,,-mp,下面选项不能同时使用:,-,apo,keep,-,mplist,2024/10/2,5,APO,的输出文件,.,l,文件,.,w2f.f,文件和,.,w2c.c,文件,.,m,文件,和.,anl,文件,2024/10/2,6,Example,2024/10/2,7,.,l,文件,2024/10/2,8,.,w2f.f,文件和,.,w2c.c,文件,2024/10/2,9,.,m,文件,和.,anl,文件,2024/10/2,10,程序运行,设置环境变量:,setenv,OMP_DYNAMIC FALSE,setenv,OMP_NUM_THREADS n,2024/10/2,11,MIPSpro,APO,的辅助功能,辅助,APO,的方法,自动并行编译制导语句,2024/10/2,12,为什么,APO,需要辅助?,实际编程中不利于自动并行的问题:,循环中调用函数,循环中使用,GOTO,语句,不明确的数组下标,2024/10/2,13,辅助,APO,的方法,改动程序结构,使之便于,APO,编译器分析,在源程序中加入人工并行制导语句(,manual,parallelization,directives),在源程序中加入自动并行编译制导语句(,automatic,parallelization,compiler directives),2024/10/2,14,自动并行编译制导语句,C*$*NO CONCURRENTIZE,C*$*CONCURRENTIZE,C*$*ASSERT DO(CONCURRENT),C*$*ASSERT DO(SERIAL),C*$*ASSERT CONCURRENT CALL,C*$*ASSERT PERMUTATION,C*$*ASSERT DO PREFER(CONCURRENT),C*$*ASSERT DO PREFER(SERIAL),2024/10/2,15,C*$*NO CONCURRENTIZE,作用:阻止循环并行执行,其作用域取决于其所在的位置:,位于子程序或函数中,位于子程序或函数外,2024/10/2,16,C*$*CONCURRENTIZE,作用:克服,C*$*NO CONCURRENTIZE,的影响,用法:放在子程序内,指明该子程序内部的循环需并行执行,2024/10/2,17,C*$*ASSERT DO(CONCURRENT),作用:指定下面的循环并行执行,注意事项:,使用不当可能会产生错误的执行码,对于一个循环内部的多个循环,该语句指定紧随其后的循环并行执行,如果指定一个内部循环并行执行,编译器可能将该循环提到最外层,不影响编译器对循环内,CALL,的分析,该语句在不使用-,apo,选项时仍然起作用,如果存在明显的依赖关系,编译器将忽略该语句,2024/10/2,18,Example forC*$*ASSERT DO(CONCURRENT),C*$*ASSERT DO(CONCURRENT),DO I = 1, N,A(I) = A(I + M),END DO,2024/10/2,19,C*$*ASSERT DO(SERIAL),作用:指定紧随其后的循环串行执行,对其它循环不起作用,2024/10/2,20,C*$*ASSERT CONCURRENT CALL,作用:忽略循环内,CALL,调用对并行处理的影响,注意事项:,作用域:作用于紧随其后的循环及该循环内部的所有循环,使用不当可能会产生错误的执行码,该语句在不使用-,apo,选项时仍然起作用,2024/10/2,21,Example forC*$*ASSERT CONCURRENT CALL,C*$* ASSERT CONCURRENT CALL,DO I = 1, M,CALL FRED(B, I, T),CALL WILMA(A, I, T),END DO,SUBROUTINE FRED(B, I, T),REAL B(*),T = B(I),END,SUBROUTINE WILMA(A, I,T),REAL A(*),A(I) = T,END,2024/10/2,22,Example forC*$*ASSERT CONCURRENT CALL,C$ DOACROSS SHARED(A,B), LOCAL(I,T),C*$* ASSERT CONCURRENT CALL,DO I = 1, M,CALL FRED(B, I, T),CALL WILMA(A, I, T),END DO,SUBROUTINE FRED(B, I, T),REAL B(*),T = B(I),END,SUBROUTINE WILMA(A, I,T),REAL A(*),A(I) = T,END,2024/10/2,23,C*$*ASSERT PERMUTATION,用法:,C*$*ASSERT PERMUTATION,(,arr,),作用:为编译器指明数组,arr,的每个元素都有不同的值,注意事项:,作用域:整个子程序内部,该语句在不使用-,apo,选项时仍然起作用,2024/10/2,24,Example for C*$*ASSERT PERMUTATION,SUBROUTINE SUB1,DO I = 1, N,A(IB(I) = ,END DO,C*$*ASSERT PERMUTATION(IB),DO I = 1, N,A(IB(I) = ,END DO,END,2024/10/2,25,C*$*ASSERT DO PREFER(CONCURRENT),作用:建议编译器对该语句后面的循环进行并行处理,注意事项:,不会因为该语句的存在而对不安全的循环进行并行处理,优先并行紧随其后的循环,如果编译器认为该语句指定的循环不能安全并行,则考虑并行处理后面的循环,如果指定一个内部循环并行执行,编译器可能将该循环提到最外层,2024/10/2,26,C*$*ASSERT DO PREFER(SERIAL),作用:该语句建议编译器对紧随其后的循环进行串行处理,DO I = 1, M,C*$* ASSERT DO PREFER (SERIAL),DO J = 1, N,A(I, J) = B(I, J),END DO,END DO,2024/10/2,27,Summary,APO,的优点:,简单易学,使用方便,对程序改动小,或不需要改动,APO,的不足:,并行效率取决于程序的结构,2024/10/2,28,
展开阅读全文