レジスタの使用

一般に大きなプログラムには,レジスタに格納すると性能が向上するようなデータが,データを格納できるレジスタ数よりも多く含まれています。この場合,Visual Fortran は一般に次の優先順位に従ってレジスタを使用しようと試みます。

  1. 配列索引を含む一時的な演算結果

  2. 変数

  3. 配列のアドレス (ベース・アドレス)

  4. その他のすべての用途

Visual Fortran は,自己判断アルゴリズムと,適度な量の計算をもとに,レジスタをどのように使えば効果的かを判断します。

レジスタへの変数の格納

レジスタを使った演算はメモリーを使った演算よりもはるかに高速なので,Visual Fortran はメモリー位置の代わりに整数および浮動小数点レジスタを使用するコードを生成します。特定の形式のデバッグを行うときには,Visual Fortran がレジスタをどのように使用するかを知っておくと便利なことがあります。

Visual Fortran は,/optimize:0 (最適化なし) が指定されている場合でも,Fortran 言語が変数値をメモリー内に保持することを要求しない限り,部分式の一時的な結果値など,変数値の格納にレジスタを使用します。

Visual Fortran は,プログラムの異なる時点で,同じ変数を異なるレジスタに格納することがあります。

	V = 3.0*Q
	.
	.
	.
	X = SIN(Y)*V
	.
	.
	.
	V = PI*X
	.
	.
	.
	Y = COS(Y)*V

Visual Fortran は,最初のVをあるレジスタに,2 番目の V を別のレジスタに格納する可能性があります。また,どちらのレジスタも,その途中では別の用途に使われる可能性があります。タイミングによっては,変数値がどのレジスタにも格納されていない場合もあります。V の値がメモリー内で使われないのであれば,1 回もレジスタに割り当てられないことさえ考えられます。

Visual Fortran は,次のように IJ,および K の値をレジスタに格納します (これらの変数が関与するループなど,他の最適化の影響がなかった場合)。

	A(I) = B(J) + C(K)

より典型的な例として,次のように式中で同一の索引変数が使用されることがあります。

	A(K) = B(K) + C(K)

この場合,K が 1 つのレジスタに格納され,3 つの配列すべての索引指定に同時に使用されます。