并行计算-多媒体课件-并行程序设计-ch06HPF编程指南.ppt

上传人:qwe****56 文档编号:70023434 上传时间:2023-01-14 格式:PPT 页数:65 大小:453.50KB
返回 下载 相关 举报
并行计算-多媒体课件-并行程序设计-ch06HPF编程指南.ppt_第1页
第1页 / 共65页
并行计算-多媒体课件-并行程序设计-ch06HPF编程指南.ppt_第2页
第2页 / 共65页
点击查看更多>>
资源描述

《并行计算-多媒体课件-并行程序设计-ch06HPF编程指南.ppt》由会员分享,可在线阅读,更多相关《并行计算-多媒体课件-并行程序设计-ch06HPF编程指南.ppt(65页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、并行算法实践上篇 并行程序设计导论并行算法实践上篇 并行程序设计导论 单元单元单元单元I I 并行程序设计基础并行程序设计基础并行程序设计基础并行程序设计基础 单元单元单元单元II II 并行程序编程指南并行程序编程指南并行程序编程指南并行程序编程指南 单元单元单元单元III III 并行程序开发方法并行程序开发方法并行程序开发方法并行程序开发方法2023/1/142国家高性能计算中心(合肥)单元II 并行程序编程指南 第四章第四章第四章第四章 MPIMPI编程指南编程指南编程指南编程指南 第五章第五章第五章第五章 PVMPVM编程指南编程指南编程指南编程指南 第六章第六章第六章第六章 HPF

2、HPF编程指南编程指南编程指南编程指南 第七章第七章第七章第七章 OpenMPOpenMP编程指南编程指南编程指南编程指南2023/1/143国家高性能计算中心(合肥)第六章第六章 HPF编程指南编程指南 6.1 6.1 HPFHPF概述概述 6.2 6.2 HPFHPF编程简介编程简介 6.3 6.3 数据映射数据映射 6.4 6.4 数据并行结构数据并行结构 6.5 6.5 HPFHPF语言的过程语言的过程 6.6 6.6 HPFHPF实例分析:实例分析:2 2D FFTD FFT 6.7 HPF6.7 HPF语言其他特性语言其他特性2023/1/144国家高性能计算中心(合肥)6.1 H

3、PF概述 引言引言 HPFHPF的语言特点的语言特点 HPFHPF的语言模型的语言模型2023/1/145国家高性能计算中心(合肥)引言 HPFHPF语言基础语言基础 HPFHPF历史历史 HPFHPF的设计目标的设计目标2023/1/146国家高性能计算中心(合肥)HPF语言基础 HPFHPF语言以语言以FORTRAN90FORTRAN90基础基础 扩展了扩展了FORTRAN90FORTRAN90 在并行机上支持数据对界和分布的控制;在并行机上支持数据对界和分布的控制;加入新的数据并行结构;加入新的数据并行结构;内部过程和标准库提供很多有用的高级抽象功能;内部过程和标准库提供很多有用的高级抽

4、象功能;EXTRINSICEXTRINSIC过程使得和其他语言或风格的接口进行标准化;过程使得和其他语言或风格的接口进行标准化;提供指令用于解决一些顺序和存储关联问题;提供指令用于解决一些顺序和存储关联问题;2023/1/147国家高性能计算中心(合肥)HPF历史 DECDEC,高性能,高性能FORTRANFORTRAN版本,版本,组织组织HPFHPF论坛,论坛,19921992年年1 1月;月;论坛正式成立,论坛正式成立,19921992年年3 3月;月;发布发布HPF1.0HPF1.0,19931993年年5 5月;月;发布发布HPF1.1HPF1.1,19941994年年1111月;月;

5、发布发布HPF2.0HPF2.0,19971997年年1 1月;月;2023/1/148国家高性能计算中心(合肥)HPF设计目标 首要目标:首要目标:对数据并行程序设计的支持;对数据并行程序设计的支持;跨越不同体系结构的可扩展性;跨越不同体系结构的可扩展性;在具有不同存储访问开销的并行计算机上的高性能在具有不同存储访问开销的并行计算机上的高性能 ;以标准以标准FortranFortran作为基础、与其它语言以及其它程序设计风格作为基础、与其它语言以及其它程序设计风格之间的开放接口和互操作性。之间的开放接口和互操作性。次要目标次要目标 能在有限时间内完成实现上的可行性;能在有限时间内完成实现上的

6、可行性;为为FortranFortran和和C C将来的标准活动提供支持;将来的标准活动提供支持;为以一致的方式向语言中增加高级特征提供一条有发展的途径。为以一致的方式向语言中增加高级特征提供一条有发展的途径。2023/1/149国家高性能计算中心(合肥)HPF的语言特点 HPF2.0HPF2.0的组成;的组成;HPF2.0HPF2.0的一些基本特征;的一些基本特征;2023/1/1410国家高性能计算中心(合肥)HPF2.0的组成 HPF2.0HPF2.0语言的组成语言的组成 语言的基本部分;语言的基本部分;已经核准的扩展部分;已经核准的扩展部分;已被承认的外部接口;已被承认的外部接口;20

7、23/1/1411国家高性能计算中心(合肥)HPF2.0的一些基本特征 数据并行制导数据并行制导数据并行制导数据并行制导 ;数据映射制导;数据映射制导;数据映射制导;数据映射制导;新的内部过程和库过程新的内部过程和库过程新的内部过程和库过程新的内部过程和库过程 ;外部过程外部过程外部过程外部过程 ;2023/1/1412国家高性能计算中心(合肥)HPF的语言模型 HPFHPF的并行方式的并行方式 HPFHPF模型的一些不足模型的一些不足2023/1/1413国家高性能计算中心(合肥)HPF的并行方式 HPFHPF支持非协作任务的并行方式支持非协作任务的并行方式 :HPFHPF程序中派生线程来执

8、行细粒度的并行任务程序中派生线程来执行细粒度的并行任务 将全部的将全部的HPFHPF程序作为一个任务,提供了粗粒度的并行性,在程序作为一个任务,提供了粗粒度的并行性,在每个任务中可以利用细粒度的循环或数组并行每个任务中可以利用细粒度的循环或数组并行 2023/1/1414国家高性能计算中心(合肥)HPF模型的一些不足 对以不太结构化的方式来表示并行性支持不够对以不太结构化的方式来表示并行性支持不够 ;对有一些数据并行应用对有一些数据并行应用HPFHPF处理得不好处理得不好 ;HPF HPF 不能和不能和SMPSMP构成的机群系统相结合构成的机群系统相结合2023/1/1415国家高性能计算中心

9、(合肥)6.2 HPF编程简介 一个简单的一个简单的HPFHPF程序实例;程序实例;HPFHPF的基本特征;的基本特征;2023/1/1416国家高性能计算中心(合肥)一个简单的HPF程序实例 program exampleprogram example!declare variable!declare variable integer a(1024)integer a(1024),b(1024)b(1024),c(1024)c(1024)integer:result=0integer:result=0!declare distribute!declare distribute !hpfhpf

10、$distribute$distribute a(blocka(block)!hpfhpf$distribute$distribute b(blockb(block)!hpfhpf$distribute$distribute c(blockc(block)!align values to distributed variables!align values to distributed variables a=1a=1 b=2b=2!add them!add them c=a+bc=a+b!calculate the sum in all elements of c!calculate the

11、 sum in all elements of c result=sum(c)result=sum(c)!print the result!print the result print *print *,“The last element isThe last element is”,c(1024)c(1024)print *print *,“The sum in all elements is”The sum in all elements is”,resultresultendend2023/1/1417国家高性能计算中心(合肥)一个简单的HPF程序实例 它的输出如下:它的输出如下:The

12、 last element is 3The last element is 3The sum in all elements is 3072 The sum in all elements is 3072 2023/1/1418国家高性能计算中心(合肥)HPF的基本特性1 变量声明变量声明 integer:integer:x,yx,y integer:result=0 integer:result=0 real real x,yx,y integer a(1024)integer a(1024),b(1024)b(1024),c(1024)c(1024)指令前缀指令前缀HPF指令是以Fortr

13、an 90语言中注释的形式出现的!hpf$ChpfChpf$*hpfhpf$2023/1/1419国家高性能计算中心(合肥)HPF的基本特性2 数据分布数据分布 作用:允许程序员向编译器建议如何将数组元素指定到处理器作用:允许程序员向编译器建议如何将数组元素指定到处理器存储器中。存储器中。!hpfhpf$distribute$distribute a(blocka(block)实例程序的分布图实例程序的分布图 2023/1/1420国家高性能计算中心(合肥)HPF的基本特性3 顺序变量顺序变量 没有显式指示为分布的数组和所有的标量没有显式指示为分布的数组和所有的标量 处理器的私有变量处理器的私

14、有变量 分布数组的赋值分布数组的赋值 a=1a=1,b=2 b=2 2023/1/1421国家高性能计算中心(合肥)HPF的基本特性4 多个分布数组之间的运算多个分布数组之间的运算 被选择的分布数组需满足如下条件被选择的分布数组需满足如下条件 :在语句中,该数组的同一元素最多只访问一次,该数组多次在语在语句中,该数组的同一元素最多只访问一次,该数组多次在语句中出现时除外;句中出现时除外;根据该数组将运算分配到各处理器后,引起的通信最少;根据该数组将运算分配到各处理器后,引起的通信最少;右部优先于左部右部优先于左部 ;效果图效果图2023/1/1422国家高性能计算中心(合肥)HPF的基本特性5

15、 分布数组的归约分布数组的归约 result=result=sum(csum(c);将将c c数组中所有元素求和,赋给顺序变量数组中所有元素求和,赋给顺序变量resultresult;2023/1/1423国家高性能计算中心(合肥)HPF的基本特性5 打印分布数组元素打印分布数组元素 HPFHPF中中I/OI/O语句在非并行代码段中,在处理器语句在非并行代码段中,在处理器0 0上执行。上执行。例例 :print*print*,“The last element is:”The last element is:”,c(1024)c(1024)处理器处理器0 0访问了处理器访问了处理器3 3上的分

16、布数组元素,上的分布数组元素,引起了处理器间引起了处理器间通信。通信。2023/1/1424国家高性能计算中心(合肥)6.3 数据映射 目的目的:使处理器间的通信开销最小;使处理器间的通信开销最小;负载在可用的处理器间均匀分布;负载在可用的处理器间均匀分布;2023/1/1425国家高性能计算中心(合肥)数据映射说明语句 模版模版 简单的抽象空间,可将其看成一个简单的抽象空间,可将其看成一个 没有内容的数组没有内容的数组 属性:属性:名字、维数、维大小!HPF$TEMPLATE tem(4,8)2023/1/1426国家高性能计算中心(合肥)数据映射说明语句 虚拟处理器阵列虚拟处理器阵列虚拟处

17、理器阵列有名字、维数、维大小三个属性 PROCESSORS指令用于定义虚拟处理器阵列虚拟处理器阵列中的处理器总数不得大于实际的物理处理器数 !HPF$PROCESSORS P(2,4)2023/1/1427国家高性能计算中心(合肥)数据映射说明语句 模板到虚拟处理器阵列的映射模板到虚拟处理器阵列的映射 HPFHPF提供了提供了DISTRIBUTEDISTRIBUTE编译指示编译指示 分布的方式分布的方式 :块分布块分布 循环分布循环分布 块循环分布块循环分布 2023/1/1428国家高性能计算中心(合肥)模板到虚拟处理器阵列的映射 块分布块分布 将数据分成相邻的将数据分成相邻的P P块块(P

18、(P为虚拟处理器阵列上相应维的大小为虚拟处理器阵列上相应维的大小)例子:例子:!HPF$TEMPLATE tem(16)!HPF$TEMPLATE tem(16)!HPF$PROCESSORS p(4)!HPF$PROCESSORS p(4)!HPF$DISTRIBUTE !HPF$DISTRIBUTE tem(BLOCKtem(BLOCK)ONTO p)ONTO p2023/1/1429国家高性能计算中心(合肥)模板到虚拟处理器阵列的映射 循环分布循环分布 将模板该维中的元素依次轮流分给不同的处理器将模板该维中的元素依次轮流分给不同的处理器 ;例子:例子:!HPF$TEMPLATE tem(

19、16)!HPF$TEMPLATE tem(16)!HPF$PROCESSORS p(4)!HPF$PROCESSORS p(4)!HPF$DISTRIBUTE !HPF$DISTRIBUTE tem(CYCLICtem(CYCLIC)ONTO p)ONTO p 2023/1/1430国家高性能计算中心(合肥)模板到虚拟处理器阵列的映射 块循环分布块循环分布块循环分布块循环分布 将模板该维划分为相邻的大小为将模板该维划分为相邻的大小为MM的子块,然后将这些子块依的子块,然后将这些子块依次轮流分给不同处理器次轮流分给不同处理器 例子:例子:!HPF$TEMPLATE tem(6)!HPF$TEMP

20、LATE tem(6)!HPF$PROCESSORS p(4)!HPF$PROCESSORS p(4)!HPF$DISTRIBUTE tem(CYCLIC(2)ONTO p !HPF$DISTRIBUTE tem(CYCLIC(2)ONTO p 2023/1/1431国家高性能计算中心(合肥)模板到虚拟处理器阵列的映射 分布数组与模板分布数组与模板 一个数组要分布必须要有一个模板一个数组要分布必须要有一个模板 模板来源:模板来源:与定义的模板与定义的模板对界对界对界对界(AlignmentAlignment););缺省的模板;缺省的模板;与另一个有模板的数组对界与另一个有模板的数组对界 ;20

21、23/1/1432国家高性能计算中心(合肥)分布数组与模板 与模板对界与模板对界与模板对界与模板对界 ALIGNALIGN编译指示,用来描述数组与模板的关系编译指示,用来描述数组与模板的关系 例子:例子:REAL REAL a(8)a(8)!HPF$!HPF$TEMPLATE tem(16)TEMPLATE tem(16)!HPF$!HPF$DISTRIBUTE DISTRIBUTE tem(BLOCKtem(BLOCK)!HPF$!HPF$ALIGN ALIGN a(ia(i)WITH tem(2*i)WITH tem(2*i)2023/1/1433国家高性能计算中心(合肥)分布数组与模板

22、缺省的模版缺省的模版 HPFHPF中可以用中可以用DISTRIBUTEDISTRIBUTE编译指示直接说明数组的分布方编译指示直接说明数组的分布方式式 例子:例子:INTEGER a(1024)INTEGER a(1024)!HPF$DISTRIBUTE !HPF$DISTRIBUTE a(BLOCKa(BLOCK)等价于:等价于:INTEGER a(1024)INTEGER a(1024)!HPF$TEMPLATE tem(1024)!HPF$TEMPLATE tem(1024)!HPF$DISTRIBUTE !HPF$DISTRIBUTE tem(BLOCKtem(BLOCK)!HPF$A

23、LIGN !HPF$ALIGN a(ia(i)WITH )WITH tem(item(i)2023/1/1434国家高性能计算中心(合肥)分布数组与模板 分布数组之间的对界分布数组之间的对界a(2*i)=a(2*i)=b(ib(i)*2)*2 对应于:对应于:REAL REAL a(200),b(100)a(200),b(100)!HPF$TEMPLATE tem(600)!HPF$TEMPLATE tem(600)!HPF$DISTRIBUTE !HPF$DISTRIBUTE tem(BLOCKtem(BLOCK)!HPF$ALIGN!HPF$ALIGN a(ia(i)WITH tem(3*

24、i)WITH tem(3*i)!HPF$ALIGN!HPF$ALIGN b(ib(i)WITH a(2*i)WITH a(2*i)2023/1/1435国家高性能计算中心(合肥)一个数据映射的HPF程序段分析 考虑如下程序段考虑如下程序段 :INTEGERa(100),b(100),c(101),i!HPF$ALIGN a(i)WITH b(i-1)!HPF$PROCESSORSp(4)!HPF$DISTRIBUTE a(BLOCK)ONTO p!HPF$DISTRIBUTE c(CYCLIC)ONTO p FORALL(i=2:100)a(i)=a(i)+b(i1)c(i)=c(i1)+c(

25、i)+c(i+1)ENDFORALL2023/1/1436国家高性能计算中心(合肥)一个数据映射的HPF程序段分析 数据映射过程:数据映射过程:2023/1/1437国家高性能计算中心(合肥)6.4 数据并行结构 数组运算数组运算 FORALLFORALL语句和语句和FORALLFORALL结构结构 INDEPENDENTINDEPENDENT指示指示2023/1/1438国家高性能计算中心(合肥)数组运算 数组和数组段数组和数组段 全数组和数组段都表示一批数据全数组和数组段都表示一批数据 数组段可以有起点、终点、步长数组段可以有起点、终点、步长 例子:例子:a(1:3,1:2)a(1:3,1

26、:2)数组段有一个重要的数组段有一个重要的形形形形属性属性 例子:例子:a(2:3,4:9)a(2:3,4:9)的形是的形是(2,6)(2,6)数组表达式数组表达式 全数组或数组段可以和运算符一起组成数组表达式全数组或数组段可以和运算符一起组成数组表达式 数组表达式中全数组和数组段的形必须相同数组表达式中全数组和数组段的形必须相同 例子例子 a(2:4:1)+b(1a(2:4:1)+b(1:3)3)a(2 a(2:4)+b(14)+b(1:3)3)2023/1/1439国家高性能计算中心(合肥)数组运算 数组赋值数组赋值 必须满足的条件:必须满足的条件:左右表达式的形相同;左右表达式的形相同;

27、右部为标量表达式右部为标量表达式 ;例子:例子:a(2 a(2:4,5 4,5:8)=b(3 8)=b(3:5,1 5,1:4)4)a(1 a(1:4,1 4,1:3)=a(1 3)=a(1:2,1 2,1:6)6)当把一个标量赋值给一个数组段时,标量的值赋给该数组段的当把一个标量赋值给一个数组段时,标量的值赋给该数组段的所有元素;所有元素;数组赋值是数组赋值是HPFHPF编译器能识别的最小可并行的单位编译器能识别的最小可并行的单位 ;数组赋值能否真正并行,关键在于左部数组是否是分布的;数组赋值能否真正并行,关键在于左部数组是否是分布的;2023/1/1440国家高性能计算中心(合肥)数组运算

28、 WHEREWHERE语句及其结构语句及其结构 作用:给那些满足逻辑条件的数组元素赋值作用:给那些满足逻辑条件的数组元素赋值 ;例子:例子:INTEGER INTEGER a(100),b(100)a(100),b(100)WHERE(aWHERE(a0)b=00)0)x(ix(i)=x(i1)+x(i+1)=x(i1)+x(i+1)FORALL (k=1:m,y(k).ne.0.0)x(k)=1.0/y(k)FORALL (k=1:m,y(k).ne.0.0)x(k)=1.0/y(k)FORALL (i=1:2,j=1:3,y(i,j)0)z(i,j)=1/y(i,j)FORALL (i=1

29、:2,j=1:3,y(i,j)0)z(i,j)=1/y(i,j)2023/1/1442国家高性能计算中心(合肥)FORALL语句和FORALL结构 FORALLFORALL结构结构 在在FORALLFORALL和和ENDFORALLENDFORALL之间之间,加入多条语句加入多条语句 ;只能使用:只能使用:赋值语句、赋值语句、FORALLFORALL语句、语句、FORALLFORALL结构、结构、WHEREWHERE语句及语句及WHILEWHILE结构结构 ;使用注意:使用注意:只能含赋值语句,赋值语句左部必须是数组元素;只能含赋值语句,赋值语句左部必须是数组元素;同一赋值语句不能对左部的同一

30、数组元素多次赋值同一赋值语句不能对左部的同一数组元素多次赋值 ;调用的函数必须是纯函数调用的函数必须是纯函数 ;要使要使FORALLFORALL结构并行执行,需要有分布数组结构并行执行,需要有分布数组 ;例子;例子;FORALL(i=1:n)FORALL(i=1:n)a(ia(i)=1)=1b(ib(i)=2)=2END FORALL END FORALL 2023/1/1443国家高性能计算中心(合肥)INDEPENDENT指示 如果循环中不含迭代间的相关,该循环是可并行的如果循环中不含迭代间的相关,该循环是可并行的 ;迭代间相关迭代间相关:读写迭代间相关读写迭代间相关 输出迭代间相关输出迭

31、代间相关 可用于:可用于:DODO循环;循环;FORALLFORALL结构;结构;2023/1/1444国家高性能计算中心(合肥)DO循环的INDEPENDENT指示 DODO循环能加循环能加INDEPENDENTINDEPENDENT指示的条件是指示的条件是 :紧嵌套循环紧嵌套循环 ;如果某一层加上如果某一层加上INDEPENDENTINDEPENDENT,则内层的循环也必须是,则内层的循环也必须是INDEPENDENTINDEPENDENT;循环内的语句只能是赋值语句和循环内的语句只能是赋值语句和ifif语句;语句;循环内的函数只能是纯函数;循环内的函数只能是纯函数;循环不含迭代间相关;循

32、环不含迭代间相关;循环内被定值的非分布量,在循环外不能直接引用循环内被定值的非分布量,在循环外不能直接引用 ;2023/1/1445国家高性能计算中心(合肥)DO循环的INDEPENDENT指示 例子:例子:step=ntotalDO l=1,lognimax=step/2DO m=0,n/step-1k=m*stept1=temp(m)t2=temp(ntotal/2+m)!HPF$INDEPENDENTDO i=k,k+imax-1g1=t1*fintr(i+imax)-t2*finti(i+imax)g2=t1*finti(i+imax)+t2*fintr(i+imax)fintr(i+

33、imax)=fintr(i)-g1finti(i+imax)=finti(i)-g2fintr(i)=fintr(i)+g1finti(i)=finti(i)+g2END DOEND DOEND DO2023/1/1446国家高性能计算中心(合肥)FORALL结构的INDEPENDENT指示 FORALLFORALL结构加结构加INDEPENDENTINDEPENDENT指示的条件是:指示的条件是:不含迭代间相关;不含迭代间相关;循环内被定值的非分布量,在循环外不能直接引用循环内被定值的非分布量,在循环外不能直接引用 ;2023/1/1447国家高性能计算中心(合肥)6.5 HPF语言的过程

34、HPFHPF语言的一般函数和子程序语言的一般函数和子程序 ;HPFHPF语言内部函数语言内部函数 ;HPFHPF语言的库函数语言的库函数 ;2023/1/1448国家高性能计算中心(合肥)HPF语言的一般函数和子程 分布数组函数分布数组函数 标量函数只能返回一个值,而数组函数可以返回一批数据;标量函数只能返回一个值,而数组函数可以返回一批数据;对数组函数进行分布描述,数组函数便成了分布数组函数;对数组函数进行分布描述,数组函数便成了分布数组函数;纯函数纯函数 遵守某些限制的函数遵守某些限制的函数 ;不能修改全局变元和全局数据的值,也不能进行不能修改全局变元和全局数据的值,也不能进行I/O I/

35、O;用户在纯函数中不能对分布数组赋值用户在纯函数中不能对分布数组赋值 ;例子:例子:PUREPUREREAL REAL FUNCTION FUNCTION vol(h,w,dvol(h,w,d)REAL REAL h,w,dh,w,d INTENT(IN):INTENT(IN)::h,w,dh,w,d volvol=h*w*d =h*w*d END END FUNCTION FUNCTION volvol 2023/1/1449国家高性能计算中心(合肥)HPF语言的一般函数和子程 EXTRINSICEXTRINSIC子程序子程序 目的:为了改变程序的执行模式目的:为了改变程序的执行模式 ;用户

36、要关心并行执行的细节用户要关心并行执行的细节 ,可以使用,可以使用EXTRINSICEXTRINSIC子程序子程序 ;2023/1/1450国家高性能计算中心(合肥)HPF语言内部函数 系统查询内部函数系统查询内部函数 计算内部函数计算内部函数 2023/1/1451国家高性能计算中心(合肥)系统查询内部函数 NUMBER_OF_PROCESSORS(DIM)NUMBER_OF_PROCESSORS(DIM):可选参数:可选参数:DIM DIM 描述:描述:返回程序所能利用的全部处理器数或者沿处理器数组的某一指定返回程序所能利用的全部处理器数或者沿处理器数组的某一指定维程序所能利用的处理器的数

37、目维程序所能利用的处理器的数目 ;参数:参数:DIM(DIM(可选的可选的)必须是一个标量,且是一个整型数,其值的范围是必须是一个标量,且是一个整型数,其值的范围是1DIMn1DIMn,其中,其中n n是处理器数组的维数是处理器数组的维数 ;结果类型,类型参数,和形状:结果类型,类型参数,和形状:缺省整数标量缺省整数标量 结果值:结果值:结果值等于依赖于实现的硬件处理器数组第结果值等于依赖于实现的硬件处理器数组第DIMDIM维的范围,或者维的范围,或者如果如果DIMDIM不存在,则等于依赖于实现的硬件处理器数组的全部元不存在,则等于依赖于实现的硬件处理器数组的全部元素数。结果总是大于素数。结果

38、总是大于0 0。2023/1/1452国家高性能计算中心(合肥)系统查询内部函数 PROCESSORS_SHAPE()PROCESSORS_SHAPE():描述:描述:返回依赖于实现的处理器数组的形状;返回依赖于实现的处理器数组的形状;参数:参数:无;无;结果类型,类型参数,和形状:结果类型,类型参数,和形状:结果是一个缺省的一维整数数组,该数组的大小等于依赖于实现结果是一个缺省的一维整数数组,该数组的大小等于依赖于实现的处理器数组的维数;的处理器数组的维数;结果值:结果值:结果值是依赖于实现的处理器数组的形状;结果值是依赖于实现的处理器数组的形状;2023/1/1453国家高性能计算中心(合

39、肥)计算内部函数 ILEN(I)ILEN(I):描述:描述:对于一个用对于一个用2 2的补码表示的整数,返回其位长减的补码表示的整数,返回其位长减1 1;参数:参数:I I必须是整型的;必须是整型的;结果类型和类型参数:结果类型和类型参数:同同I I;结果值:结果值:如果如果I I是非负的,则是非负的,则ILEN(I)ILEN(I)的值是的值是 ;如果;如果I I是负的,是负的,则则ILEN(I)ILEN(I)的值是的值是 ;2023/1/1454国家高性能计算中心(合肥)HPF语言的库函数 映射查询函数映射查询函数 映射查询函数允许程序在运行时确定一个数组的实际映射映射查询函数允许程序在运行

40、时确定一个数组的实际映射 ;描述了数组实际上是怎样被映射到机器上;描述了数组实际上是怎样被映射到机器上;位维护函数位维护函数 LEADZLEADZ计算一个整数描述中前导零的位数;计算一个整数描述中前导零的位数;POPCNTPOPCNT统计整数中统计整数中1 1的位数;的位数;POPPARPOPPAR计算一个整数的奇偶性计算一个整数的奇偶性 ;2023/1/1455国家高性能计算中心(合肥)HPF语言的库函数 数组归约函数数组归约函数 操作方式与操作方式与FORTRANFORTRAN的的SUMSUM和和ANYANY内部函数相同内部函数相同 ;新的归约函数是新的归约函数是 :IALLIALL、IA

41、NYIANY、IPARITYIPARITY和和PARITY PARITY;例子:例子:result=IAND_IDENTITY_ELEMENTresult=IAND_IDENTITY_ELEMENTDO i_1=LBOUND(array,1),UBOUND(array,1)DO i_1=LBOUND(array,1),UBOUND(array,1).DO DO i_ni_n=LBOUND(array,n),UBOUND(array,nLBOUND(array,n),UBOUND(array,n)IF(mask(i_1,i_2,.,IF(mask(i_1,i_2,.,i_ni_n)&)&resu

42、lt=IAND(result,array(i_1,i_2,.,result=IAND(result,array(i_1,i_2,.,i_ni_n)END DOEND DO.END DO END DO 2023/1/1456国家高性能计算中心(合肥)HPF语言的库函数 数组组合散播函数数组组合散播函数 函数是一些一般化的数组归约函数;函数是一些一般化的数组归约函数;一般形式一般形式 XXX_SCATTER(ARRAY,BASE,INDX1,.,XXX_SCATTER(ARRAY,BASE,INDX1,.,INDXn,MASKINDXn,MASK)XXXXXX所允许的值是所允许的值是ALLALL,

43、ANYANY,COPYCOPY,COUNTCOUNT,IALLIALL,IANYIANY,IPARITYIPARITY,MAXVALMAXVAL,MINVALMINVAL,PARITYPARITY,PRODUCTPRODUCT,以,以及及SUMSUM;INDX INDX数组是整型的,并且数组是整型的,并且INDXINDX参数的个数必须等于参数的个数必须等于BASEBASE的的维数维数 ;参数参数MASKMASK是逻辑型的,而且是可选的是逻辑型的,而且是可选的 ;2023/1/1457国家高性能计算中心(合肥)HPF语言的库函数 数组前缀和后缀函数数组前缀和后缀函数 函数提供了对数组的和子数组扫

44、描操作函数提供了对数组的和子数组扫描操作 ;一般形式一般形式XXX_PREFIX(ARRAY,DIM,MASK,SEGMENT,EXCLUSIVE)XXX_PREFIX(ARRAY,DIM,MASK,SEGMENT,EXCLUSIVE);XXX_SUFFIX(ARRAY,DIM,MASK,SEGMENT,EXCLUSIVE)XXX_SUFFIX(ARRAY,DIM,MASK,SEGMENT,EXCLUSIVE);XXXXXX的允许值是的允许值是ALLALL,ANYANY,COPYCOPY,COUNTCOUNT,IALLIALL,IPARITYIPARITY,MAXVALMAXVAL,MINVA

45、LMINVAL,PARITYPARITY,PRODUCTPRODUCT和和SUMSUM 参数参数MASKMASK和和SEGMENTSEGMENT必须是逻辑型的必须是逻辑型的 ;SEGMENTSEGMENT必须与必须与ARRAYARRAY具有相同的形状具有相同的形状 ;MASKMASK必须与必须与ARRAYARRAY相符相符 ;EXCLUSIVEEXCLUSIVE是一个逻辑型标量;是一个逻辑型标量;DIMDIM是一个介于是一个介于1 1和和ARRAYARRAY的维数之间的整数;的维数之间的整数;结果值与结果值与ARRAYARRAY具有相同的形状具有相同的形状 2023/1/1458国家高性能计算

46、中心(合肥)HPF语言的库函数 数组排序函数数组排序函数 SORT_UPSORT_UP和和SORT_DOWNSORT_DOWN函数返回排序过的数组;函数返回排序过的数组;GRADE_UPGRADE_UP和和GRADE_DOWNGRADE_DOWN函数返回排序过的置换。函数返回排序过的置换。2023/1/1459国家高性能计算中心(合肥)6.4 HPF实例分析2D FFT 串行串行2D FFT2D FFT代码如下:代码如下:REAL REAL,DIMENSION(n,nDIMENSION(n,n):a1a1,a2 a2 DO DO WHILE(.trueWHILE(.true.).)READ(u

47、nit=1READ(unit=1,end=100)a1 end=100)a1 CALL rowffts(a1)CALL rowffts(a1)a2=a1 a2=a1 CALL colffts(a2)CALL colffts(a2)WRITE(unit=2)a2 WRITE(unit=2)a2 CYCLE CYCLE 100 CONTINUE 100 CONTINUE EXIT EXIT END DO END DO 2023/1/1460国家高性能计算中心(合肥)6.4 HPF实例分析2D FFT 流水线任务和数据并行的流水线任务和数据并行的2D FFT 2D FFT 的的HPFHPF程序程序

48、:REAL REAL,DIMENSION(n,nDIMENSION(n,n):a1,a2 a1,a2 LOGICAL done1 LOGICAL done1!HPF$PROCESSORS procs(8)!HPF$PROCESSORS procs(8)!HPF$DISTRIBUTE a1(block,*)ONTO procs(1!HPF$DISTRIBUTE a1(block,*)ONTO procs(1:4)4)!HPF$DISTRIBUTE a2(*,block)ONTO procs(5!HPF$DISTRIBUTE a2(*,block)ONTO procs(5:8)8)!HPF$TEM

49、PLATE!HPF$TEMPLATE,DIMENSION(4)DIMENSION(4),DISTRIBUTE(BLOCK)ONTO procs(1DISTRIBUTE(BLOCK)ONTO procs(1:4)4):td1 td1!HPF$ALIGN WITH td1(*)!HPF$ALIGN WITH td1(*):done1 done1 !HPF$TASK_REGION done1=.false!HPF$TASK_REGION done1=.false。DO WHILE(.true.)DO WHILE(.true.)!HPF$!HPF$ON(procs(1ON(procs(1:4)BEGI

50、N4)BEGIN,RESIDENT RESIDENT READ(unit=READ(unit=iu,endiu,end=100)a1=100)a1 CALL rowffts(a1)CALL rowffts(a1)GOTO 101 GOTO 101 100 100 done1=.truedone1=.true。101 101 CONTINUE CONTINUE!HPF$END ON!HPF$END ON IF(done1)EXIT IF(done1)EXIT a2=a1 a2=a1!HPF$!HPF$ON(procs(5ON(procs(5:8)BEGIN8)BEGIN,RESIDENT RES

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com