構文:
/assume:keyword
/assume オプションは,Fortran 構文アナライザー,オプティマイザ,およびコード・ジェネレータの実行時前提条件を指定します。オプション・キーワードには,以下のものがあります。
次に /assume のオプションを示します。
/assume:noaccuracy_sensitive を指定すると,コンパイラは論理代数学上の同一性規則 (逆,結合,および分配) に基づいて,コードの順序を変更できるようになります。ビジュアル開発環境では,「Fortran」タブの「Optimizations」カテゴリの「Allow Reordering of Floating-Point Operations」を指定します。
数値結果は,中間結果の丸め方の違いにより,基本設定 (/assume:accuracy_sensitive) といくぶん異なることがあります。
/assume:noaccuracy_sensitive を使ったときの数値結果は,つねに精度が低いというわけではありません。内積和などの一部の浮動小数点演算では,より精度の高い結果を生成する場合もあります。たとえば,次の式は数学的には等価ですが,有限精度計算では同じ値にならないことがあります。
X = (A + B) - C X = A + (B - C)
/assume:noaccuracy_sensitive を省略し,/fast を省略すると,コンパイラは計算に使われる規則を制限するため,一部の最適化が行われなくなることがあります。
/assume:noaccuracy_sensitive を指定するか,/fast を指定して /assume:accuracy_sensitive を省略すると,コンパイラは論理代数学上の同一性規則に基づいてコードの順序を変更し,性能を向上させることができます。
/assume:noaccuracy_sensitive についての詳細は,「演算順序の変更による最適化」を参照してください。
/assume:buffered_io オプションは,各記録が書き出されるたびに記録をディスクに書き出す (フラッシュする) か (基本設定),バッファに蓄積するかを制御します。
ディスク装置の場合,/assume:buffered_io (またはこれと等価な OPEN 文の BUFFERED='YES' 指定子) は,Fortran 実行システムによってディスクに書き出されるまで,内部バッファに複数の記録出力文 (WRITE) を溜めておくように要求します。ファイルが直接探査で開かれた場合,I/O バッファリングは無視されます。
バッファ出力を使用すると,通常はディスクに対してより大きなデータのブロックが書き出され,書き出し頻度が減るために,ディスク I/O の能率が向上します。ただし,/assume:buffered_io または BUFFERED='YES' を指定した場合,システム障害が起こると,ディスクに書き出されていなかった記録が失われる可能性があります。
基本設定では,すべての I/O で BUFFERED='NO' と /assume:nobuffered_io が使用されます。この場合,Fortran 実行システムは,WRITE (またはこれに似た記録出力文) のたびに内部バッファを空にします。
OPEN 文の BUFFERED 指定子は,/assume:[no]buffered_io オプションよりも優先されます。
ビジュアル開発環境では,「Fortran」タブの「Optimizations」カテゴリの「Enable I/O Buffering」を指定します。
/assume:buffered_io についての詳細は,「記録バッファとディスク I/O を効率的に使用する」を参照してください。
/assume:byterecl オプションは,書式なしファイルにのみ適用されます。
ビジュアル開発環境では,「Fortran」タブの「Fortran Data」カテゴリの「Use Bytes as Unit for Unformatted Files」を指定します。
/assume:byterecl オプションを指定すると,次の効果があります。
明示的な OPEN 文の RECL 指定子の単位がバイトであることを指定します。
出力並びで INQUIRE によって返される記録長の値を,強制的にバイト単位にします。
/assume:nobyterecl を指定すると,書式なしファイルの RECL 値が 4 バイト (ロングワード) 単位であることを指定したことになります。これが基本設定です。
/assume:dummy_aliases オプションを指定すると,コンパイラは,手続への仮引数が,他の仮引数とまたは参照結合,親子結合,共通ブロック結合で共有された変数と,メモリー位置を共有していると仮定します。基本設定は /assume:nodummy_aliases です。
ビジュアル開発環境では,「Fortran」タブの「Fortran Data」(または「Optimizations」) カテゴリの「Enable Dummy Argument Aliasing」を選択します。
これらのプログラム解釈は,Fortran 90 標準に厳密に従ってはおらず,性能を低下させます。/assume:dummy_aliases を省略すると,コンパイラはこのような仮定を行わずにすみ,実行時性能が向上します。ただし,/assume:dummy_aliases を省略すると,この種の別名に依存しているプログラムは実行に失敗したり,誤った答えを生成する可能性があります。
/assume:dummy_aliases は,呼び出される側の副プログラムをコンパイルするときにのみ指定すれば十分です。
仮別名化を使用するプログラムを,/assume:nodummy_aliases を有効にしてコンパイルすると,プログラムの実行時の動作は予測不可能になります。このようなプログラムの結果は,具体的にどのような最適化が行われるかに依存します。場合によっては通常の結果が生じることもありますが,問題を引き起こす別名が関わる演算に使われる値が変わったために,結果が変わる場合もあります。
詳細については,「仮別名化の仮定」を参照してください。
このオプションは,プロセッサーが -0.0 と +0.0 の違いを区別する能力を持っている場合に,コンパイラが SIGN 組込み関数で IEEE 浮動小数点値の -0.0 (マイナス・ゼロ) を扱う際に,Fortran 95 の標準的な解釈を使用するかどうかを制御します。基本設定は /assume:nominus0 で,Fortran 90 と FORTRAN 77 の解釈を使用します。つまり,SIGN 関数では,値 -0.0 と +0.0 は 0.0 として扱われます。
SIGN 組込み関数で,IEEE の値 -0.0 を使える Fortran 95 の解釈を要求するためには,/assume:minus0 を指定します。
ビジュアル開発環境では,「Fortran」タブの「Floating Point」カテゴリの「Enable IEEE Minus Zero Support」を指定します。
このオプションは,定数実引数が変更できるかどうかを指定します。基本設定では,定数である実引数は読み取り専用 (/assume:protect_constants) です。定数である実引数の変更を可能にするには,/assume:noprotect_constants を指定します。
ビジュアル開発環境では,「Fortran」タブの「Fortran Data」カテゴリの「Constant Actual Arguments are Read-Only」を指定します。
このオプションは,USE 文で指定されたモジュール・ファイル,または INCLUDE 文で指定されたソース・ファイルを検索するディレクトリを制御します。
/assume:source_include を指定すると,コンパイルされるソース・ファイルが置かれているディレクトリ中で,モジュールまたはインクルード・ファイルを検索します。これが基本設定です。
/assume:nosource_include を指定すると,現在の (基本) ディレクトリ中で,モジュールまたはインクルード・ファイルを検索します。
ビジュアル開発環境では,「Fortran」タブの「Preprocessor」カテゴリの「Default INCLUDE and USE Paths」を指定します。
/assume:underscore オプションを指定すると,外部ユーザー定義名に下線を追加するかどうかを制御することができます。これらの名前は,主プログラム名,名前付き COMMON,BLOCK DATA,および,EXTERNAL で明示的に,または暗黙的に宣言された名前です。無名共通ブロック名は _BLNK__ のままで,Fortran 組込み関数は影響を受けません。
ビジュアル開発環境では,「Fortran」タブの「External Procedures」 (または「Fortran Data」) カテゴリの「Append Underscore to External Names」を指定します。
/assume:nounderscore オプションを指定すると,外部ユーザー定義名に下線は付けられません。これが基本設定です。
たとえば,次のコマンドは noaccuracy_sensitive と nosource_include キーワードを要求し,他の /assume キーワードについては基本設定を受け入れています。
DF /assume:(noaccuracy_sensitive,nosource_include) testfile.f90