ASYNCHRONOUS

目的

ASYNCHRONOUS ステートメントによって、有効範囲単位の処置中に保留 I/O ストレージ・シーケンスに関連付ける変数を指定します。

技術仕様の始まり非同期通信に使用される変数に、ASYNCHRONOUS 属性を指定する必要があります。詳しくは、『非同期通信の相互運用可能変数』を参照してください。技術仕様の終わり

変数に対して ASYNCHRONOUS 属性を指定すると、それは特定のコード動作の最適化から除外されます。

構文

構文図を読む構文図をスキップする
>>-ASYNCHRONOUS--::--ioitem_list-------------------------------><

ioitem
変数名です。

規則

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
技術仕様の始まり
以下に示すのは、非同期通信の実行時に 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
技術仕様の終わり

関連情報