4.6 显式接口 |
在某些条件下,子程序不需要显式接口。Fortran中所允许的一些条件在使用映射指令的HPF程序中被紧缩了。
对用户的建议:这些条件是复杂的。如果你有一个显式接口的话,则你不必读本部分。因此如果你有所怀疑,仅需确保你有一个显式接口。(对用户的建议结束)
除非下列所有条件成立,否则需要一个显式接口:
1.Fortran不需要它,且
2.所有哑参都不是以抄写方式分配,或不具有INHERIT属性,且
3.对于每一对对应的哑实参数,或者
(a)它们都被隐含映射,或者
(b)它们都被显式映射,并且
i. 实参映射是哑参映射的一个特殊化,且
ii.如果实参和哑参所根本对准的目标都是显式分配的,则每一个分配指令的dist-onto子句必须指定处理器排列具有相同的形状。
且
4.对于每一对象对应的哑实参数,或者
(a)它们都是顺序的,或者
(b)它们都是非顺序的
基本原理:下列推论成立:
.一个平常的Fortran程序(例如,没有HPF指令)将继续是合法的,无须增加附加的接口,这一点至少在所有变量缺省都是串行的条件下是这样的。本结论是由条款1,2,3a和4a所保证的。
.如果有必要重映射,则这一事实对于调用者是可见的。这样实现时就可以选择让所有的重映射都有调用者来执行。
(基本原理结束)
对用户的建议:这一要求强烈地促使用户总是提供显式接口。这是一件好事—显式接口使得许多错误能够在编译时就被发现并能大大加速软件的开发进程。
注意,可以三种方式提供显式接口:
1.模块子程序具有一个显式接口。
2.内部子程序具有一个显式接口
3.显式接口可由接口模块提供。
另外,由定义可知,一个内部过程总是具有一个显式接口。
Fortran特有的程序设计方式能够广泛地利用模块;例如,每一个子程序可以在一个模块中。这就自动提供了显式接口,无须程序元作额外的尝试。应该基本上没必要书写一个接口模块。(对用户的建议结束)
Fortran标准12.2节中所给出的哑数据对象和函数结果的特性被扩展到还包括了这种对象的hpf特性,这些特性被递归定义成如下形式:
.一个处理器排列有一个HPF特性:它的形状。
.一个模板具有至多三个HPF特性:
1.它的形状;
2.若显式声明,则它的分配方式;
3.若显式声明,则它所分配到的处理器排列的HPF特性(例如它的形状)。
.一个哑数据对象具有下列HPF特性:
1.若显式声明,则它的对准以及其对准目标的所有HPF特性;
2.若显式声明,则它的分配方式,以及它所分配到的处理器排列的所有HPF特性(例如,其形状)
.函数结果与哑数据对象具有相同的HPF特性。特别是,它具有下列HPF特性:
1.若显式声明,则它的对准以及其对准目标的所有HPF特性;
2.若显式声明,则它的分配方式,以及它所分配到的处理器排列的所有HPF特性(例如,其形状)
基本原理:一旦通过接口模块给出显式接口,Fortran指明了接口模块中所必须指定的信息;它通过使用Fortran特性的概念做到这一点。例如,哑数据对象的特性包括它们的类型。接口模块中必须指定特性;Fortran标准的12.3.2.1节阐明:
一个接口体指定了所有的过程特性并且这些特性必须与过程定义中所指定的那些相一致
正常情况下,一个过程的接口模块是该过程适当定义的原文拷贝。本节只是简单地说这种原文拷贝必须包含任何与过程哑参相关的映射指令。
Copyright: NPACT |