ASYNCHRONOUS ステートメントによって、有効範囲単位の処置中に保留 I/O ストレージ・シーケンスに関連付ける変数を指定します。
非同期通信に使用される変数に、ASYNCHRONOUS 属性を指定する必要があります。詳しくは、『非同期通信の相互運用可能変数』を参照してください。
変数に対して ASYNCHRONOUS 属性を指定すると、それは特定のコード動作の最適化から除外されます。ASYNCHRONOUS 属性は、ASYNCHRONOUS I/O ステートメント内の変数を使用して無条件に代入することができます。
オブジェクトでは、ASYNCHRONOUS 属性を、他の有効範囲単位に入れずに、特定の有効範囲単位内に入れることができます。
1 つのオブジェクトに、ASYNCHRONOUS 属性がある場合、そのサブオブジェクトのすべてに ASYNCHRONOUS 属性があります。
エンティティーは、関連モジュールに ASYNCHRONOUS または VOLATILE 属性がなくても、それらの属性をローカルの有効範囲単位内に入れることができます。
アクセスされたエンティティーは、ホスト・エンティティーに ASYNCHRONOUS または VOLATILE 属性がなくても、それらの属性を入れることができます。
関連エンティティーは、セレクターが変数であり、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
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