binopt [-binstrument[=on|off]] [-bdata=datafile] [-bmt[=on|off]] [-o filename] [-V] [-flags] [-Q[y|n]] [-xinline=[[,v...]]] binfile
binopt [-buse[=on|off]] [-blevel=0|1|2] [-bdata=datafile] [-bfinal[=on|off]] [-o filename] [-V] [-flags] [-Q[y|n]] [-xinline=[[,v...]]] binfile
binopt コマンドは、(SPARC および x86/x64) Oracle Solaris のバイナリ (実行可能ファイルまたは共有オブジェクト) を最適化するために使用します。使用されているソース言語に関係なくバイナリを最適化できます。ソース言語が混在するバイナリも最適化できます。効果的に最適化するには、パッチ 127111-07 がインストールされている新しい Solaris 10 システムで、明示的な最適化のレベル (-xOn) でバイナリを作成する必要があります。
バイナリオプティマイザは、プロファイル収集の目的でバイナリを計測するために使用することもできます。計測されるバイナリは、一般的なユーザーのデータを表す入力データのトレーニングセットを使用して実行する必要があります。このトレーニング実行によって、バイナリファイルとプロファイルデータが作成されます。このファイルは、プロファイルで最適化されたバイナリを作成するために、バイナリオプティマイザにフィードバックする必要があります。
binopt コマンドは複数のレベルの最適化を実行します。高いレベルの最適化では、より多くの最適化が実行され、より最適なバイナリとなる可能性があります。考えられる悪影響は作成時間が増加することです。
デフォルトでは、出力ファイル名を指定しない場合は、入力ファイルが最適化されたバイナリで上書きされます。-bfinal オプションを指定しない場合、binopt コマンドによって作成されたバイナリは、バイナリオプティマイザの以降の呼び出しによって最適化される可能性があります。
バイナリオプティマイザは、単一スレッドでの実行を想定して、アプリケーションバイナリを計測します。アプリケーションがスレッドを開始する場合は、-bmt=on を使用して、スレッドセーフのプロファイルカウントを有効にします。
binopt は Oracle Solaris プラットフォームでのみ使用できます。
binopt は、gprof のプロファイリングのために -xpg フラグを指定してコンパイルされたバイナリを計測するために使用しないでください。binopt と gprof には互換性がありません。
binopt コマンドは、-p、-pg、-qp、-xpg、-xlinkopt フラグのいずれかを使用して構築されたバイナリとは互換性がありません。
プロファイル収集のためにバイナリを計測します。すべての最適化が自動的にオフになります。-bdata オプションは、プロファイルデータを格納するために使用するデフォルトファイルを変更するために使用できます。これは、-buse フラグとともに使用できません。
プロファイルデータを使用して、プロファイルに基づく最適化を実行します。-bdata フラグを使用すると、デフォルトのファイルの場所を変更できます。これは、-binstrument フラグとともに使用できません。
異なるレベルの最適化を実行します。レベル 0 では、最適化は実行されません。レベル 1 では、コードの並べ替えの最適化が行われます (これがデフォルトの動作です)。レベル 2 では、データフロー情報が作成され、より積極的な最適化 (インライン化、アドレス関連の最適化など) が実行されます。
プロファイルデータが格納されるファイルを指定します。このオプションは -binstrument または -buse と一緒にのみ使用できます。それ以外の場合は無視されます。このオプションを使用しない場合、デフォルトのファイル名は binfile.instrdata です。
バイナリの最適化を以降に実行できないように、出力バイナリをファイナライズします。このオプションは、以降に変換が計画されていない最後のビルド手順で役に立ちます。たとえば、これは、最後に最適なバイナリを生成するときに、-buse オプションとともに使用できます。デフォルトは -bfinal=off です。
スレッドセーフのプロファイルカウントを有効にします。実行可能ファイルがスレッドを開始する場合は、-binstrument とともに使用します。実行可能ファイルが -bmt=on を指定せずに計測され、実行時にスレッドが開始された場合、計測でアプリケーションが終了し、メッセージが表示されます。デフォルトは -bmt=on です。例:
% binopt -binstrument -bmt=on binfile -o binoutfile
入力 binfile ファイルをデフォルトで上書きするのではなく、出力ファイル filename を指定します。
ツールのバージョン番号を標準エラー出力に出力します。
使用可能なオプションを 1 行に要約した内容を出力します。
バイナリオプティマイザのバージョン識別情報を出力ファイルに出力します (または出力しません)。-Qy を使用すると、識別情報が出力ファイルに追加されます (デフォルトの動作)。-Qn はこの情報を抑止します。
v は、%auto、func_name、no%func_name のいずれかにできます。
-xinline は、リストで指定した関数だけのインライン化を試行します。このリストは、関数名のコンマ区切りのリスト、no%func_name 値のコンマ区切りのリスト、または値 %auto で構成されます。%nofunc_name を指定した場合、コンパイラは指定した関数をインライン化しません。%auto を指定すると、binopt は関数を自動的にインライン化しようとします。デフォルトでは、自動インライン化が最適化レベル 2 で有効になります。
最適化するバイナリファイル。
次の例は、作成されたバイナリを最適化のために準備し、binopt コマンドを使用して最適化し、バイナリファイルを上書きしています。
% cc -O -xbinopt=prepare *.c -o a.out % binopt a.out使用例 2 プロファイルに基づく最適化を計測および実行します。
次の例では、バイナリを計測して、トレーニング実行を行い、プロファイルデータを使用してプロファイルに基づく最適化を実行します。
% binopt -binstrument -bdata=a.out.data -o a.out.instr a.out % ./a.out.instr % binopt -buse -bdata=a.out.data -o a.out.opt a.out使用例 3 レベル 2 の最適化を実行して、ファイナライズします。
次の例は、レベル 2 でバイナリの最適化を実行し、バイナリを以降に最適化できないように、バイナリをファイナライズしています。
% binopt -blevel=2 -bfinal a.out
cc(1), CC(1), f95(1)