最適化中に、高位のループ分析と変換を実行するようコンパイラーに指示します。
ここで、
arraypad コンパイラーは、利点があると考えられる個所に、任意の配列を適宜選択した分量ごとに埋め込みます。すべての配列が埋め込まれる必要はなく、いろいろな異なる配列が異なる分量ごとに埋め込まれる場合があります。 arraypad=n コンパイラーは、すべての配列をコードに埋め込みます。埋め込みの分量は、正整数の値でなければならず、各配列は、エレメントの整数値で埋め込まれます。 n は整数値であるため、埋め込み値を配列エレメントの最大サイズの倍数 (典型的な値は 4、8、または 16) にすることをお勧めします。 simd | nosimd コンパイラーは、連続する配列のエレメントに関してループ内で実行される特定の操作を、VMX (Vector Multimedia Extension) 命令に対する呼び出しに変換します。この呼び出しは、いくつかの結果を一度に計算するため、個々の結果を連続して計算するよりは速くなります。
-qhot=nosimd を指定すると、コンパイラーはループおよび配列で最適化を実行しますが、VMX 命令に対する呼び出しで特定のコードを置き換えることを避けます。
このサブオプションは、-qarch=ppc970 が有効で、オペレーティング・システムが VMX 命令をサポートするバージョンの場合にのみ有効です。
vector | novector コンパイラーは、連続する配列のエレメント (例えば、平方根、逆数平方根) に関してループ内で実行される特定の操作をライブラリー・ルーチンの呼び出しに変換します。この呼び出しは、同時にいくつかの結果を計算します。これは、各結果を逐次計算するよりも高速です。
-qhot=novector を指定すると、コンパイラーは、ループおよび配列について高位の変換を実行しますが、呼び出しで特定のコードをベクトル・ライブラリー・ルーチンに置き換える個所の最適化は行いません。 -qhot=vector オプションは、使用中のプログラムの結果の精度に影響する場合があるため、精度の変更を受け入れられない場合は、 -qhot=novector または -qstrict のいずれかを指定してください。
-qhot、 -O4、または -O5 オプションを指定したとき、-qhot=simd および -qhot=vector サブオプションはデフォルトでオンになります。
同様に、コマンド行で -qhot を指定するときに、最低でもレベル 2 の最適化を指定しなければ、コンパイラーは -O2 と見なします。
キャッシュ・アーキテクチャーのインプリメンテーションにより、 2 の累乗の配列次元はキャッシュの使用効率の低下を招く可能性があります。オプショナルの arraypad サブオプションにより、コンパイラーは、配列の次元を増加できるようになります。そうすることにより、配列処理ループの効率が向上する可能性があります。 2 の累乗のいくつかの次元で大規模な配列 (特に最初の配列) がある場合、または配列処理プログラムがキャッシュ・ミスまたはページ不在によってスローダウンしている場合は、 -qhot=arraypad を指定することを考慮に入れてください。
simd サブオプションは配列データを最適化し、ターゲット・アーキテクチャーがこのような操作を許可する場合、並列して数学演算を実行します。並列操作は 16 バイトのベクター・レジスターで起こります。コンパイラーは、最適化を容易にするため、レジスター長を超えるベクターを 16 バイト単位に分割します。 16 バイト単位では、以下のデータ型の 1 つを含むことができます。
- 4 個の整数。
- 8 個の 2 バイト単位
- 16 個の 1 バイト単位
短いベクトル化は倍精度の浮動小数点数値をサポートしないため、-qarch=ppc970 を指定する必要があります。-qhot=simd 最適化を適用すると、大きなイメージ処理要求があるアプリケーションに役立ちます。
vector サブオプションは配列データを最適化し、適用できる場合、並列して数学演算を実行します。コンパイラーは、ベクター・サイズの制限がない標準のレジスターを使用します。 vector サブオプションは単精度および倍精度の浮動小数点数値をサポートするため、大きな数値処理要求があるアプリケーションでは役立ちます。
-qhot=arraypad および -qhot=arraypad=n は両方とも安全なオプションではありません。これらは、埋め込みが実行された場合にコードの中断の原因となりうる再シェーピングまたは同等性の検査を実行しません。
以下の例は、-qhot=arraypad オプションをオンにします。
xlc -qhot=arraypad myprogram.c