多数の新機能と機能拡張は、 最適化とパフォーマンス・チューニングのカテゴリーに分類されます。
-qarch コンパイラー・オプションは、指定されたマシン・アーキテクチャー用に生成される特定の命令を制御します。 -qtune コンパイラー・オプションは、命令、 スケジューリング、および他の最適化を調整して、 指定されたハードウェアでのパフォーマンスを向上させます。 これらのオプションは一緒に働いて、 指定されたアーキテクチャーに最適なパフォーマンスを与えるアプリケーション・コードを生成します。
XL C/C++ V8.0 は、VMX 命令セットをサポートするプロセッサーおよび新しく使用可能になった POWER5+ プロセッサーをサポートする -qarch コンパイラー・オプションで使用可能なサブオプションのリストを増加させます。 以下の新規の -qarch オプションが使用可能です。
- -qarch=ppc64v
- -qarch=pwr5x
XL C/C++ には、 数学集中アプリケーションのパフォーマンスを大幅に向上させることができる高度に調整された数学関数が組み込まれています。 これらの関数は、以下の高性能ライブラリーを通じて提供されます。
MASS ライブラリーの使用に関する詳細については、 『Mathematical Acceleration Subsystem の使用』を参照してください。
BLAS 関数の使用に関する詳細については、『Basic Linear Algebra Subprogram の使用』を参照してください。
次の表の項目は、 前掲のセクションではまだ言及されていない新規または変更されたコンパイラー・オプションおよびディレクティブを説明しています。
ここで提示されている情報は、単なる簡単な概要です。 これらのコンパイラー・オプションに関する詳細については、『パフォーマンス最適化オプション』 を参照してください。
オプション/ディレクティブ | 説明 |
---|---|
-qfloat | -qfloat は、
以下のサブオプションを追加しています。
|
-qipa | -qipa は、
以下のサブオプションを追加しています。
|
-O | -O3
コンパイラー・オプションを指定することは、-qhot=level=0
コンパイラー・オプションの設定も想定するようにコンパイラーに指示するようになりました。
-O4 または -O5 コンパイラー・オプションを指定することは、 -qhot=level=1 コンパイラー・オプションの設定も想定するようにコンパイラーに指示するようになりました。 |
次の表は、このリリースでの新規の組み込み関数をリストしています。 XL C/C++ が提供する組み込み関数の詳細については、『POWER および PowerPC アーキテクチャーの組み込み関数』を参照してください。
関数 | 説明 |
---|---|
void __builtin_return_address (unsigned int level); | 現行の関数の、あるいはその 1 つの呼び出し元の戻りアドレスを戻します。 ここで、level は、呼び出しスタックをスキャンアップするフレームの数を示す定数リテラルです。 |
void __builtin_frame_address (unsigned int level); | 現行の関数の関数フレームの、またはその 1 つの呼び出し元のアドレスを戻します。 ここで、level は、呼び出しスタックをスキャンアップするフレームの数を示す定数リテラルです。 |
int __compare_and_swap(volatile int* addr, int* old_val_addr, int new_val); | 単一ワード変数の内容を、 保管された古い値と比較するアトミック操作を実行します。 |
int __compare_and_swaplp(volatile long* addr, long* old_val_addr, long new_val); | ダブルワード変数の内容を、 保管された古い値と比較するアトミック操作を実行します。 |
int __fetch_and_add(volatile int* addr, int val); | addr によって指定された単一ワードを、 単一のアトミック操作で val によって指定された量だけ増量します。 |
long __fetch_and_addlp(volatile long* addr, long val); | addr によって指定されたダブルワードを、 単一のアトミック操作で val によって指定された量だけ増量します。 |
unsigned int __fetch_and_and(volatile unsigned int* addr, unsigned int val); | addr によって指定された単一ワード内のビットを、 単一のアトミック操作でその値を入力 val パラメーターと AND することによって、クリアします。 |
unsigned long __fetch_and_andlp(volatile unsigned long* addr, unsigned long val); | addr によって指定されたダブルワード内のビットを、 単一のアトミック操作でその値を入力 val パラメーターと AND することによって、クリアします。 |
unsigned int __fetch_and_or(volatile unsigned int* addr, unsigned int val); | addr によって指定された単一ワード内のビットを、 単一のアトミック操作でその値を入力 val パラメーターと OR することによって、設定します。 |
unsigned long __fetch_and_orlp(volatile unsigned long* addr, unsigned long val); | addr によって指定されたダブルワード内のビットを、 単一のアトミック操作でその値を入力 val パラメーターと OR することによって、設定します。 |
unsigned int __fetch_and_swap(volatile unsigned int* addr, unsigned int val); | addr によって指定された単一ワードを、 単一のアトミック操作で値または入力 val パラメーターに設定して、 メモリー・ロケーションの元の内容を戻します。 |
double __frim(double val); | double 形式の入力 val を取り込み、val を次に低い整数値に丸め、結果を double 形式で戻します。 POWER5+ プロセッサーでのみ有効です。 |
float __frims(float val); | float 形式の入力 val を取り込み、val を次に低い整数値に丸め、結果を float 形式で戻します。 POWER5+ プロセッサーでのみ有効です。 |
double __frin(double val); | double 形式の入力 val を取り込み、val を最も近い整数値に丸め、結果を double 形式で戻します。 POWER5+ プロセッサーでのみ有効です。 |
float __frins(float val); | float 形式の入力 val を取り込み、val を最も近い整数値に丸め、結果を float 形式で戻します。 POWER5+ プロセッサーでのみ有効です。 |
double __frip(double val); | double 形式の入力 val を取り込み、val を次に高い整数値に丸め、結果を double 形式で戻します。 POWER5+ プロセッサーでのみ有効です。 |
float __frips(float val); | float 形式の入力 val を取り込み、val を次に高い整数値に丸め、結果を float 形式で戻します。 POWER5+ プロセッサーでのみ有効です。 |
double __friz(double val); | double 形式の入力 val を取り込み、val をゼロに最も近い次の整数値に丸め、結果を double 形式で戻します。 POWER5+ プロセッサーでのみ有効です。 |
float __frizs(float val); | float 形式の入力 val を取り込み、val をゼロに最も近い次の整数値に丸め、結果を float 形式で戻します。 POWER5+ プロセッサーでのみ有効です。 |
long __ldarx(volatile long* addr); | Load Double Word And Reserve Indexed (ldarx) 命令を生成します。 この命令は、後続の stwcx. 命令と一緒に使用して、 指定されたメモリー・ロケーションに対して読み取り/変更/書き込みをインプリメントすることができます。 |
int __lwarx(volatile int* addr); | Load Word And Reserve Indexed (lwarx) 命令を生成します。 この命令は、後続の stwcx. 命令と一緒に使用して、 指定されたメモリー・ロケーションに対して読み取り/変更/書き込みをインプリメントすることができます。 |
int __stdcx(volatile long* addr, long val); | Store Double Word Conditional Indexed (stdcx.) 命令を生成します。 この命令は、先行の ldarx. 命令と一緒に使用して、 指定されたメモリー・ロケーションに対して読み取り/変更/書き込みをインプリメントすることができます。 |
int __stwcx(volatile int* addr, int val); | Store Word Conditional Indexed (stwcx.) 命令を生成します。 この命令は、先行の lwarx. 命令と一緒に使用して、 指定されたメモリー・ロケーションに対して読み取り/変更/書き込みをインプリメントすることができます。 |
unsigned long __mftb(); | Move From Time Base (mftb) ハードウェア命令を生成します。 |
unsigned int __mftbu(); | Move From Time Base Upper (mftbu) ハードウェア命令を生成します。 |
関連情報