IVDEP

一般コンパイラ指示文:コンパイラの依存関係分析を支援します。これは,繰返し DO ループにのみ適用することができます。これはまた INIT_DEP_FWD (INITialize DEPendences ForWarD) としても指定できます。

形式

cDEC$ IVDEP

c
次のいずれか:C (または c),!* (「一般コンパイラ指示文の構文規則」を参照)

規則と振る舞い

IVDEP 指示文は,コンパイラのオプティマイザに対して行う,DO ループ中でのメモリー引用の順序に関する表明です。

IVDEP 指示文はコンパイラに対して,すべての依存関係が,通常のスカラ実行順序と同じ前方の向きで生じていると仮定して依存関係分析を開始するように指示します。一方,コンパイラの通常の動作では,依存関係の向きに関して何の初期仮定も行わずに依存関係分析を行います。

IVDEP 指示文は,それが影響を与える個々の DO ループの DO 文の前になくてはなりません。IVDEP 指示文と DO 文の間には,以下に示す以外のソース・コード行が存在してはなりません。

IVDEP 指示文は,ユーザーが依存関係が字句順になっていることを知っている DO ループに適用されます。たとえば,ループ内の 2 つのメモリー引用が同じメモリー位置を参照し,その片方がメモリー位置を変更する場合,その位置を参照する最初の引用は,プログラム・ソース・コード中で字句的に前の方に置かれていなくてはなりません。この際には,代入文の右辺は左辺よりもにあると見なされます。

IVDEP 指示文はコンパイラに対して,文が順次実行とは異なる特定の順序で実行された場合に,プログラムが正しく動作することを通知します。たとえば,最初の文またはブロックをすべての繰り返しが終わるまで実行し,その次の文またはブロックをすべての繰り返しが終わるまで実行するというような順序です。オプティマイザはこの情報を,依存関係に関して証明できたその他の情報とともに利用して,他の実行順序を選択することができます。

互換性

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

関連情報

一般コンパイラ指示文

次の例では,IVDEP 指示文がループ内の依存関係に関して追加の情報を提供しています。これにより,ループ変換が可能になる場合があります。

	!DEC$ IVDEP
	DO I=1, N
	  A(INDARR(I)) = A(INDARR(I)) + B(I)
	END DO

この例では,スカラ実行順序は次のようになります。

  1. INDARR(I) を取り出す。

  2. 手順 1 の結果を使って,A(INDARR(I)) を得る。

  3. B(I) を取り出す。

  4. 手順 2 と 3 の結果を足し合わせる。

  5. 手順 4 の結果を,手順 1 の A(INDARR(I)) で指定される位置に格納する。

IVDEP はコンパイラに対して,手順 1 と 5 が同じメモリー位置を参照するとき,手順 1 が実行順序で前の方に存在するので,手順 1 がつねに最初にその位置を参照することを知らせます。このアプローチにより,コンパイラは,配列引用の相対順序を保持する命令スケジュールを選択している限り,命令の順序を変更することができます。