最適化中に高位ループ分析と変換を行うようコンパイラーに命令する。
.-nohot------------------------------. >>- -q--+-hot--+---------------------------+-+----------------->< | .-vector-------------. | | +-simd---------------+ | '-=--+-arraypad--+------+-+-' | '-=--n-' | +-level--=--+-0-+----+ | '-1-' | +-nosimd-------------+ '-novector-----------'
ここで、
arraypad | キャッシュ・アーキテクチャーのインプリメンテーションにより、 2 の累乗の配列次元はキャッシュの使用効率の低下を招く可能性があります。 arraypad サブオプションにより、コンパイラーは配列の大きさを増加することができます。そうすることにより配列処理ループの効率が改善される可能性があります。 arraypad サブオプションを数値以外の値に使用すると、コンパイラーは利益があると推測する任意の配列に選択した量だけ埋め込みを行います。すべての配列で必ずしも埋め込みが行われるわけではなく、また異なる配列ごとに異なる分量で埋め込みが行われます。 |
arraypad=n | コンパイラーはコード内のすべての配列で埋め込みを行います。 埋め込みの量は正整数の値でなければならず、それぞれの配列は整数のエレメントによって埋め込まれます。 n は整数値なので、埋め込み値は配列エレメントの最大サイズの倍数 (通常、4、8、または 16) にすることをお勧めします。 |
level=0 |
コンパイラーは高位変換のサブセットを実行します。
-qhot=level=0 を指定すると、デフォルトは novector、nosimd および noarraypad に設定されます。 -qhot=level=0 を -O4 の前に指定すると、level は 1 に設定されます。 -qhot=level=0 を -O4 の後に指定すると、 level は 0 に設定されます。 |
level=1 |
-qhot=level=1 は -qhot と同等で、-qhot を暗黙指定するコンパイラー・オプションも -qhot=level=0 が明示的に指定されている場合を除き、-qhot=level=1 を暗黙指定します。 level 以外のすべての -qhot サブオプションのデフォルトのホット・レベルは 1 です。例えば、-O3 -qhot=novector を指定した場合、ホット・レベルは 1 に設定されます。 -O4 または -qsmp を指定すると、-qhot=level=0 オプションが明示的に指定されている場合を除き、 -qhot=level=1 が暗黙指定されます。 |
simd | nosimd | コンパイラーはループで配列の連続するエレメントに対して実行される特定の演算を、Vector Multimedia Extension (VMX) 命令への呼び出しに変換します。この呼び出しは 1 度にいくつかの結果を計算するため、それぞれの結果を順次計算するよりも高速です。
並列操作は 16 バイトのベクトル・レジスターで発生します。コンパイラーはレジスター長を超えるベクトルを 16 バイトの単位に分割して、最適化を可能にします。 16 バイトの単位には、次のいずれかのタイプのデータを入れることができます。
-qhot=simd 最適化を適用することは、大きなイメージ処理要求を持つアプリケーションに役立ちます。 このサブオプションは、VMX 命令をサポートするアーキテクチャー を指定した場合にのみ有効です。これらの条件では、-qhot=simd がデフォルトとして設定されます。 -qhot=nosimd を指定すると、コンパイラーはループと配列に対して最適化を実行しますが、特定のコードを VMX 命令への呼び出しに置換することは行いません。 |
vector | novector | -qnostrict および -qignerrno、または最適化レベル -O3 以上を使用して指定された場合、このベクトル・サブオプションによりコンパイラーは、ループ内で連続する配列のエレメント (例えば、平方根、逆平方根) に対して実行される特定の演算子を MASS ライブラリー・ルーチンへの呼び出しに変換させます。この呼び出しは同時に幾つかの結果を計算するため、それぞれの結果を順次計算するより高速です。
コンパイラーはベクトル・サイズの制限のない標準レジスターを使用します。vector サブオプションは単精度および倍精度の浮動小数点の数学をサポートし、数学的処理の要求が大きいアプリケーションに役立ちます。
ベクトル化はプログラムの結果の精度に影響を与えることがあるため、-O4 以上を使用する場合は、精度の変更が受諾不能ならば、-qhot=novector を指定してください。 |
デフォルトは -qnohot です。
-qhot をサブオプションなしで指定すると、 -qhot=nosimd、-qhot=noarraypad、 -qhot=vector、および -qhot=level=1 が暗黙指定されます。 -qhot オプションは、-qsmp、-O4、および -O5 によっても暗黙指定されます。
コマンド行に -qhot を指定するときに少なくともレベル 2 の最適化も指定しないと、コンパイラーは -O2 を想定します。
-qhot=arraypad と -qhot=arraypad=n は両方とも危険なオプションです。これらは、埋め込みが行われた場合にコードの中断の原因となる可能性のある再形成や等価の検査を実行しません。
以下の例は、-qhot=arraypad オプションをオンにします。
xlc -qhot=arraypad myprogram.c
関連情報