ASYNCHRONOUS

用途

ASYNCHRONOUS 语句指定在作用域限定单元生效时哪些变量可以与暂挂 I/O 存储序列相关联。

技术规范开始 您必须为 ASYNCHRONOUS用于异步通信的变量的属性。 详情请参阅异步通信中的可互操作变量技术规范结束

为变量指定 ASYNCHRONOUS 属性时,将从某些代码运动优化中排除该属性。

语法

读取语法图跳过可视语法图ASYNCHRONOUS::ioitem_list
ioitem
是变量名

规则

可以使用 ASYNCHRONOUS I/O 语句中的变量隐式指定 ASYNCHRONOUS 属性。

对象可能在特定作用域限定单元中具有 ASYNCHRONOUS 属性,而不会在其他作用域限定单元中具有该属性。

如果对象具有 ASYNCHRONOUS 属性,那么其所有子对象都具有 ASYNCHRONOUS 属性。

即使相关联的模块实体不具有 ASYNCHRONOUSVOLATILE 属性,该实体也可以在本地作用域限定单元中具有此属性。

所访问的实体可能具有 ASYNCHRONOUSVOLATILE 属性,即使主机实体不具有此属性也是如此。

当且仅当选择器是变量且具有 ASYNCHRONOUS 属性时,关联实体才具有 ASYNCHRONOUS 属性。

示例

以下是可与暂挂 I/O 序列相关联的变量示例:


MODULE MOD
	INTEGER :: IOITEM
END MODULE

PROGRAM MAIN

	CALL SUB1()
	CALL SUB2()
END PROGRAM

SUBROUTINE SUB1() ! OPTIMIZATION MAY NOT BE PERFORMED
	USE MOD
	ASYNCHRONOUS :: IOITEM
	....
END SUBROUTINE

SUBROUTINE SUB2() ! OPTIMIZATION MAY BE PERFORMED
	USE MOD
	.....
END SUBROUTINE

! OPTIMIZATION IS NOT POSSIBLE IN SUB2()IF MODULE MOD IS REWRITTEN AS FOLLOWS:

MODULE MOD
	INTEGER, ASYNCHRONOUS :: IOITEM
END MODULE

技术规范开始
以下是执行异步通信时如何使用 ASYNCHRONOUS 属性的示例:
INTEGER :: ARRAY(1000)

... ! Code that writes to ARRAY

BLOCK
ASYNCHRONOUS :: ARRAY
  CALL MPI_ISEND(ARRAY,...REQ,...)
  ... ! Code that does not write to ARRAY
  CALL MPI_WAIT(REQ,...)
END BLOCK

... ! Code that writes to ARRAY
技术规范结束

相关信息