第九节 异步I/O所认可的扩展 |
本节定义了一个从HPF或Fortran程序中执行异步I/O的机制。这些被描述为对Fortran 90标准的改变。
对于9.2.1节的第二段,在“and”之前增加了“一个所允许的传送方法的依赖于处理器的集合,”。
对于9.3.4节,规则R905,增加了
H901 connect-spec is ASYNCH=scalar-default-char-expr
在9.3.4.10节之后,增加了新的一节,标题为“OPEN语句中的ASYNCH=指示符”,包括下列段落:
scalar-default-char-expr将被估算为YES或NO。YES指明允许异步数据传送语句建立这一连接。NO指明不允许异步数据传送语句建立这一连接。所指示的值将放在文件所允许的传送方法的集合中。如果忽略这个指示符,缺省值为NO。
对于9.4.1节,规则R912,增加了
H902 io-control-spec is ID=scalar-default-int-variable
对于9.4.1节,规则R912增加了约束:
约束:如果存在ID=指示符,则将出现REC=指示符,同时format和namelist-group-name将不会出现。
约束:如果存在ID=指示符,则数据传送语句中的任意表达式都不能出现函数引用。
在9.4.1节的结尾,增加了下列三段:
增加ID=指示符导致异步数据传送的初始化。除非数据传送语句中出现IOSTAT=指示符且所指定的变量被定义成非零值,或者出现ERR=指示符且在数据传送语句上检测一个错误条件,在这种条件下可以允许不出现WAIT语句;否则数据传送语句必须最终紧接一条WAIT语句,该语句指定了数据传送语句中ID变量所返回的同一ID值。这一WAIT语句被称为匹配的WAIT语句。注意,异步数据传送必须是直接的和非格式化的。对于用ASYNCH=值为NO的指示符所打开的单元,不能指定ID=指示符。
在9.4.1节中,约束后面的第四和第五段将所有"IOSTAT=或一个SIZE="都改为"IOSTAT=,SIZE=或一个ID="。
在最后一段之前的9.4.3节的末尾插入了下列正文:
对于异步数据传送,在数据传送语句执行期间或后面的数据传送过程中,都可能发生错误。如果这些条件不会导致程序终止,则程序员可通过匹配的WAIT语句中的ERR=以及IOSTAT=指示符检测出这些条件。
将9.4.3的最后一段更改为下列形式:
如果在执行期间或在不包含IOSTAT=以及ERR=的I/O语句的后续数据传送期间发生错误,则终止程序的执行。
如果异步数据传送语句导致ERR或IOSTAT变量被置位,则任意匹配的WAIT语句都将作同样的事。
在9.4.4节中,将操作8更改为下列形式:
对于9.4.4节,增加了下列三段:
对于异步数据传送,1-8步都符合异步数据传送语句和匹配的WAIT语句。4-7步可能会随程序的执行异步发生。如果实现时没有支持异步数据传送,则1-8步可由异步数据传送语句执行,匹配的WAIT语句仍然必须执行,唯一的影响是返回状态信息。
在异步传送语句中以input-item或output-item出现的任意变量,或与这种变量相关联的变量,都不能被引用,不能被定义,或者直到匹配的WAIT语句执行时才变成未定义的。
允许多重异步数据传送操作,但它们必须都是读或都是写。除非所有的WAIT要求都满足,否则在同一单元中不允许其它的I/O语句。具有ID=指示符的WRITE语句不能将同一单元和记录号指定为任意匹配的WAIT语句尚未执行的具有ID=指示符的WRITE语句。
对用户的建议:注意,我们仍然允许READ上I/O列表的从左到右的定义。这意味着语句
READ(10,ID=IDNUM,REC=10)I,A(I)
是合法的且与异步READ具有相同的语义。(对用户的建议结束)
在第九节中,将“和INQUUIRE语句”改为“,INQUIRE,和WAIT语句”。在9.6.1节中,规则R924增加了
H903 inquire-spec is ASYNCH = scalar-default-char-variable
Copyright: NPACT |