Oracle® Solaris Studio 12.4: Fortran ユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

3.4.147 –xlinkopt[={1|2|0}]

再配置可能なオブジェクトファイルのリンク時の最適化を実行します。

ポストオプティマイザは、リンク時にバイナリオブジェクトコードに対して高度なパフォーマンス最適化を多数実行します。オプションの値には、実行する最適化のレベルを 0、1、2 のいずれかで設定します。

0
ポストオプティマイザは無効です。これがデフォルトです。
1
リンク時の命令キャッシュカラーリングと分岐の最適化を含む、制御フロー解析に基づき最適化を実行します。
2
リンク時のデッドコードの除去とアドレス演算の簡素化を含む、追加のデータフロー解析を実行します。

値なしで -xlinkopt フラグを指定すると、-xlinkopt=1 とみなされます。

このような最適化は、リンク時にオブジェクトのバイナリコードを解析することによって実行されます。オブジェクトファイルは書き換えられませんが、最適化された実行可能コードは元のオブジェクトコードとは異なる場合があります。

このオプションは、プログラム全体をコンパイルし、実行時プロファイルフィードバックとともに使用されるともっとも効果的です。

コンパイルとリンクを個別に実行する場合、-xlinkopt はコンパイルとリンクの両方で指定する必要があります。

demo% f95 -c -xlinkopt a.f95 b.f95
demo% f95 -o myprog -xlinkopt=2 a.o b.o

レベルパラメータは、コンパイラのリンク時にだけ使用されます。前述の例では、オブジェクトバイナリが暗黙的に指定された 1 のレベルでコンパイルされていても、使用される最適化後のレベルは 2 です。

リンク時のポストオプティマイザは、インクリメンタルリンカー ild とともに使用することはできません。-xlinkopt フラグは、デフォルトリンカーを ld に設定します。-xildon フラグを使用してインクリメンタルリンカーを明示的に有効にしたときに -xlinkopt オプションも指定していると、-xlinkopt オプションは無効になります。

-xlinkopt オプションを有効にするには、プログラム内のルーチンの少なくとも一部は、このオプションを指定してコンパイルする必要があります。-xlinkopt を指定しないでコンパイルされたオブジェクトバイナリについても、オプティマイザは限定的な最適化を実行できます。

-xlinkopt オプションは、コンパイラのコマンド行にある静的ライブラリのコードは最適化しますが、コマンド行にある共有 (動的) ライブラリのコードは最適化しません。共有ライブラリを構築 (-G でコンパイル) する場合は、-xlinkopt も使用できます。

-xlinkopt オプションでは、プログラムを最適化するためにプロファイルフィードバック (-xprofile) が必要です。プロファイリングは、コードの使用頻度がもっとも高い部分ともっとも低い部分を明らかにし、オプティマイザにそれに基づいて処理を集中するよう指示します。リンク時の最適化は、コードの最適な配置によって命令キャッシュミスを大幅に削減できる大規模アプリケーションで特に重要です。また、-xlinkopt はプログラム全体のコンパイル時に使用するともっとも効果的です。このオプションは次のように使用します。

demo% f95 -o progt -xO5 -xprofile=collect:prog file.f95
demo% progt
demo% f95 -o prog -xO5 -xprofile=use:prog -xlinkopt file.95

プロファイルフィードバックの使用方法の詳細は、-xprofile オプションを参照してください。

このオプションを指定してコンパイルすると、リンク時間がわずかに増えます。オブジェクトファイルも大きくなりますが、実行可能ファイルのサイズは変わりません。-xlinkopt フラグと -g フラグを指定してコンパイルすると、デバッグ情報が取り込まれるため、実行可能ファイルのサイズが増えます。