XL C/C++ の機能の概要

他の XL コンパイラーとの共通点
資料、オンライン・ヘルプ、および技術サポート
ハードウェアおよびオペレーティング・システムのサポート
高度に構成することが可能なコンパイラー
言語標準への準拠
GNU との互換性
ソース・コード・マイグレーションおよび規格合致検査
ライブラリー
Mathematics Acceleration Subsystem ライブラリー
Basic Linear Algebra Subprogram
ツールおよびユーティリティー
プログラムの最適化
64 ビット・オブジェクトの機能
共用メモリーの並列処理
OpenMP ディレクティブ
診断リスト
シンボリック・デバッガー・サポート

XL C/C++ Advanced Edition V8.0 for Linux は、Fortran プログラムとの間での言語間呼び出しを含めて、大規模な、複合の、 コンピューターを集約的に使用するプログラムに使用することができます。 この章では、XL C/C++ のコンパイラーの機能についての概要を述べます。 この章は、XL C/C++ を評価する人、 およびこの製品についてさらに知識を得たい新規ユーザーのために書かれています。

他の XL コンパイラーとの共通点

XL C/C++ は、XL C および XL Fortran と一緒になって、XL コンパイラーのファミリーを形成します。

XL コンパイラーは、AIX、Linux 配布版、OS/390、OS/400、z/OS、および z/VM オペレーティング・システムといった多様なプラットフォームおよびプログラム言語間でコンパイラーの関数および最適化テクノロジーを共用する共通のコード・ベースから導き出された、 より大きい IBM C、C++、および Fortran コンパイラーのファミリーの一部です。 この共通のコード・ベースは、国際的プログラム言語標準への準拠と共に、 複数のオペレーティング・システムおよびハードウェア・プラットフォームにわたる整合性のあるコンパイラーのパフォーマンスおよびプログラムの移植の容易さを確実にするのに役立ちます。

XL コンパイラーは、AIX および選択された Linux 配布版で使用することができます。

資料、オンライン・ヘルプ、および技術サポート

このガイドは、XL C/C++ およびその機能の概要を記載しています。 ユーザーは、以下の形式での更に広範囲な製品資料を見つけることができます。

ハードウェアおよびオペレーティング・システムのサポート

XL C/C++ Advanced Edition V8.0 for Linux は、いくつかの Linux 配布版 をサポートします。 サポートされる配布版および要件の完全なリストについては、 README ファイル、および の中の 『システムの前提条件』 を参照してください。

コンパイラー、そのライブラリー、およびその生成されたオブジェクト・プログラムは、 必要なソフトウェアとディスク・スペースを備えた すべての POWER3(TM)、POWER4(TM) POWER5(TM)、POWER5+(TM)、PowerPC(R)および PowerPC 970 システムで実行します。

さまざまなハードウェア構成から最大の利益を得るために、 コンパイラーは、アプリケーションの実行に使用されるマシンの構成に基づいて、 パフォーマンス・チューニング用のいくつかのオプションを提供しています。

高度に構成することが可能なコンパイラー

XL C/C++ は、 ユーザーの独自の固有のコンパイル要件に合わせてユーザーがコンパイラーを調整できるようにする豊富な機能を提供しています。

コンパイラー呼び出しコマンド
XL C/C++ は、コンパイラーを呼び出すのに使用できるいくつかの互いに相異なるコマンドを提供しています。 たとえば、xlCxlc++ および xlc です。 各呼び出しコマンドは、 特定の言語レベル仕様を満たすようにコンパイル出力を調整するようにコンパイラーに指示するという点で、 固有です。 コンパイラー呼び出しコマンドは、すべての標準化された C および C++ 言語レベル、 および多くの使用頻度の高い拡張機能をサポートするように提供されています。

コンパイラーは、また、大部分の呼び出しコマンドの、対応する 「_r」バージョンも提供しています。 たとえば、xlC_r です。 これらの「_r」呼び出しは、コンパイラーに、 オブジェクト・ファイルをスレッド・セーフのコンポーネントおよびライブラリーにリンクしバインドするように指示し、 コンパイラーが作成するデータおよびプロシージャー用のスレッド・セーフのオブジェクト・コードを作成します。

XL C/C++ コンパイラー呼び出しコマンドに関する詳細については、 の XL C/C++ によるコンパイルまたは 『コンパイラーまたはコンパイラー・コンポーネントの呼び出し』 を参照してください。

コンパイラー・オプション
提供されている大きいコンパイラー・オプションのセットを使用して、 コンパイラーのアクションを制御することができます。 さまざまなカテゴリーのオプションは、ユーザーがアプリケーションをデバッグし、 アプリケーションのパフォーマンスを最適化および調整し、 他のプラットフォームからのプログラムとの互換性のために言語レベルおよび拡張機能を選択し、 それなしではソース・コードの変更が必要になるような他の多くの共通のタスクを行うのに役立ちます。

XL C/C++ は、環境変数、コンパイラー構成ファイル、コマンド行オプション、 および C または C++ プログラム・ソースに組み込まれているコンパイラー指示ステートメントの組み合わせを通じてコンパイラー・オプションを指定させます。

XL C/C++ コンパイラー・オプションの詳細については、『コンパイラー・オプションの参照』を参照してください。

カスタム・コンパイラー構成ファイル
インストール・プロセスは、/etc/opt/ibmcmp/vac/8.0/vac.cfg にデフォルトののコンパイラー構成ファイルを作成します。 この構成ファイルには、 コンパイラー・オプションのデフォルトの設定値を定義するいくつかのスタンザが入っています。

ユーザーのコンパイル上の必要によって、XL C/C++ が提供するデフォルトの設定値以外のコンパイラー・オプション設定値を指定することが要求されるという状況がしばしば起こり得ます。 そのような場合、XL C/C++ は、 追加の構成ファイルを作成するのに使用できる vac_configure ユーティリティーを提供します。 次に、ユーザーは、任意のテキスト・エディターを使って、 これらのファイルに独自の頻繁に使用するコンパイラー・オプションの設定値を入れるように変更することができます。

カスタム構成ファイルの作成と使用に関する詳細については、 『構成ファイルのカスタマイズ』 を参照してください。

言語標準への準拠

コンパイラーは、C および C++ に関する以下のプログラム言語仕様をサポートします。

標準化された言語レベルのほかに、XL C/C++ は、 以下のものが含まれる言語拡張機能もサポートします。

C および C++ の言語仕様および拡張機能の詳細については、『サポートされる言語標準』を参照してください。

GNU との互換性

XL C/C++ は、gccおよび g++ を使用して開発されたアプリケーションの移植を容易にするために、GNU コンパイラー・コマンド・オプションのサブセットをサポートします。

このサポートは、gxlc または gxlc++ 呼び出しコマンドが、選択された GNU コンパイラー・オプションと一緒に使用される場合に使用可能です。 コンパイラーは、コンパイラーを呼び出す前に、これらのオプションを、 それぞれに対応する XL C/C++ コンパイラー・オプションにマップします。

gxlc および gxlc++ 呼び出しコマンドは、/etc/opt/ibmcmp/vac/8.0/gxlc.cfg プレーン・テキスト構成ファイルを使用して、GNU 対 XL C/C++ オプション・マッピングおよびデフォルトを制御します。 ユーザーは、/etc/opt/ibmcmp/vac/8.0/gxlc.cfg ファイルをカスタマイズして、 ユーザーがもっている可能性のある任意の固有のコンパイル要件をよりよく満たすことができます。 詳細については、 『gxlcおよび gxlc++ による GNU C /C++ コンパイラー・オプションの再使用』を参照してください。

XL C/C++ は、GNU C および GNU C++ ヘッダー・ファイルを GNU C および C++ ランタイム・ライブラリーと一緒に使用して、GNU コンパイラー、GCC バージョン 3.3 を使用して作成されたコードとバイナリー互換のコードを作成します。 アプリケーションの一部は、XL C/C++ を使用してビルドすることができ、GCC を使用してビルドされた部分と結合して、GCC のみを使用してビルドされたかのように動作するアプリケーションを作成することができます。

ソース・コード・マイグレーションおよび規格合致検査

XL C/C++ は、 コンパイラーにユーザーのアプリケーションをコンパイルするように指示するコンパイラー呼び出しコマンドを提供することによって、 ユーザーの既存の C および C++ ソース・コードに対する投資を保護するのに役立ちます。 ユーザーは、また、-qlanglvl コンパイラー・オプションを使用して、特定の言語レベルを指定することができ、 コンパイラーは、ユーザー・プログラムのソース内の言語または言語拡張エレメントがその言語レベルに合致しない場合、 警告、エラーおよび重大エラーのメッセージを出します。

詳細については、『-qlanglvl』を参照してください。

ライブラリー

XL C/C++ Advanced Edition V8.0 for Linux は、以下のライブラリーとともに出荷されます。

Mathematics Acceleration Subsystem ライブラリー

IBM Mathematics Acceleration Subsystem (MASS) ライブラリーは、特に PowerPC プロセッサー・アーキテクチャーでの最適なパフォーマンス用に調整された、 高度に調整されたスカラーおよびベクトルの数学的組み込み関数から成り立っています。 ユーザーは、MASS ライブラリーを選択して、 広範囲のプロセッサー上での高性能コンピューティングをサポートするか、 または特定のプロセッサー・ファミリー用に調整されたライブラリーを選択することができます。

MASS ライブラリーは、32 ビットおよび 64 ビットの両方のコンパイル・モードをサポートし、 スレッド・セーフであり、それらに対応する libm ルーチンを超えて改良されたパフォーマンスを提供します。 これらのライブラリーは、 ユーザーが自身のアプリケーション用に特定のレベルの最適化を要求したときに、自動的に呼び出されます。 ユーザーは、また、最適化オプションが有効であるかないかに関係なく、MASS 関数への明示的呼び出しを行うことができます。

詳細については、 『Mathematical Acceleration Subsystem の使用』 を参照してください。

Basic Linear Algebra Subprogram

高性能代数関数の BLAS セットは、libxlopt ライブラリーに入れて出荷されます。 これらの関数を使用すると、以下のことが行えます。

BLAS 関数の使用に関する詳細については、 『Basic Linear Algebra Subprogram の使用』を参照してください。

ツールおよびユーティリティー

xlc_install
この対話式ユーティリティーは、 システムに XL C/C++ をインストールするのに役立ちます。
new_install
XL C/C++ をインストールした後、このユーティリティーを実行すると、 ご使用のシステムでコンパイラーが使用できるように構成されます。
vac_configure
このユーティリティーは、ご自身で可能な追加の構成ファイルの作成を行い、 次に、コンパイラー・オプション・デフォルト設定値のご自身のカスタム・セットを入れるように変更するために使用します。
cleanpdf コマンド
PDFDIR ディレクトリーの管理に使用される、 プロファイル指示フィードバックに関連するコマンド。 指定されたディレクトリー、PDFDIR ディレクトリー、 または現行ディレクトリーから、すべてのプロファイル情報を除去します。
mergepdf コマンド
複数の PDF レコードを単一のレコードに結合するときに、 それらのレコードの重要性を評価する能力を提供する、 プロファイル指示フィードバック (PDF) に関連するコマンド。 PDF レコードは、同じ実行可能モジュールから得られたものである必要があります。
resetpdf コマンド
resetpdf コマンドの現在の動作は、cleanpdf コマンドと同じであり、 他のプラットフォーム上での前のリリースとの互換性のために保持されています。
showpdf コマンド
プロファイル指示フィードバック・トレーニング実行 (オプション -qpdf1 および -qshowpdf のもとでのコンパイル) で実行されるすべてのプロシージャーの呼び出しおよびブロック数を表示するコマンド。
gxlc および gxlc++ ユーティリティー
GNU C または GNU C++ 呼び出しコマンドを、対応する xlc または xlC コマンドに変換し、XL C/C++ コンパイラーを呼び出す呼び出しメソッド。 これらのユーティリティーの目的は、GNU コンパイラーで作成された既存のアプリケーション用に使用される makefile への変更の数を最小化し、XL C/C++ への変換を容易にすることにあります。

プログラムの最適化

XL C/C++ は、 ユーザーのプログラムの最適化を制御するのに役立つことのできるいくつかのコンパイラー・オプションを提供します。 これらのオプションを使用して、以下に挙げることを行えます。

変換の最適化によって、 アプリケーションの実行時の全体的パフォーマンスを向上させることができます。 C および C++ は、 サポートされるさまざまなハードウェアに合わせた変換の最適化のポートフォリオを提供します。 このような変換では、以下に挙げることを行えます。

コンパイラーは、洗練されたプログラムの分析および変換が可能であるため、 開発時には比較的少ない労力しかけずに、パフォーマンスを大幅に向上させることができます。 さらに、XL C/C++ は OpenMP などのプログラミング・モデルを使用可能にし、 それにより、ユーザーはハイパフォーマンスのコードを作成できるようになります。

可能であれば、コードを最適化する前に、 まず最適化しない状態でコードをテストおよびデバッグしてください。

最適化手法の詳細については、『アプリケーションの最適化』を参照してください。

最適化関連のコンパイラー・オプションの要約については、『パフォーマンス最適化オプション』を参照してください。

64 ビット・オブジェクトの機能

XL C/C++ コンパイラーの 64 ビット・オブジェクトの機能は、 より大きいストレージ要件およびより強力な処理能力に対する増大する要求に対処するものです。 Linux オペレーティング・システムは、64 ビットのアドレス・スペースの使用を通じて 64 ビットのプロセッサーを活用するプログラムを開発し、 実行できるようにする環境を提供します。

64 ビット・アドレス・スペース内に収めることのできる大きい実行可能モジュールをサポートするために、64 ビット実行可能モジュールの要件を満たす、別個の、64 ビット・オブジェクト形式が使用されます。 リンカーは 64 ビット・オブジェクトをバインドして 64 ビット実行可能モジュールを作成します。 一つにバインドされるオブジェクトは、 すべて同じオブジェクト形式になっている必要があることに注意してください。 以下のシナリオは許されず、ロード、実行、あるいはその両方に失敗します。

32 ビット実行可能モジュールは、 現在 32 ビット・プラットフォームで実行しているのと同じように、64 ビット・プラットフォームおよび 32 ビット・プラットフォームの両方で、依然として実行し続けます。

XL C/C++ は、主として -q64 および -qarch コンパイラー・オプションを使用することによって、64 ビット・モードをサポートします。 この組み合わせは、目標のアーキテクチャー用のビット・モードと命令セットを決めます。

詳細については、『32 ビットおよび 64 ビットのモードの使用』 を参照してください。

共用メモリーの並列処理

XL C/C++ Advanced Edition V8.0 for Linux は、マルチプロセッサー・システム体系についてのアプリケーション開発をサポートします。 XL C/C++ での並列化アプリケーションの開発には、 以下に挙げるいずれの方法でも使用することができます。

詳細については、『プログラムの並列化』を参照してください。

OpenMP ディレクティブ

OpenMP ディレクティブは、XL C/C++ および 他の多くの IBM および IBM 以外の C、C++、および Fortran のコンパイラーによってサポートされるされる API ベースのコマンドのセットです。

ユーザーは、OpenMP ディレクティブを使用して、 特定のループを並列化する方法をコンパイラーに指示することができます。 ソースにディレクティブがあると、 コンパイラーが並列コードに対して並列分析を実行する必要がなくなります。 OpenMP ディレクティブは、並列処理に必要なインフラストラクチャーを提供する Pthread ライブラリーの存在を必要とします。

OpenMP ディレクティブは、アプリケーションを並列化するための重要な 3 つの問題に対処します。

  1. 節 (clause) およびディレクティブは、変数のスコーピングに使用できます。 変数を共用すべきではない場合が頻繁に起こります。 いいかえれば、プロセッサーはそれぞれ、 それ自身の変数のコピーを持っている必要があります。
  2. 作業共用ディレクティブは、コードの並列領域に入っている作業を複数の SMP プロセッサー間で分散させる方法を指定します。
  3. ディレクティブは、複数のプロセッサー間での同期を制御するのに使用できます。

XL C/C++ は、OpenMP API バージョン 2.5 仕様をサポートします。 詳細については、www.openmp.org を参照してください。

診断リスト

コンパイラー出力リストには、組み込んでも、 あるいは省略してもいい任意指定の部分があります。 適用できるコンパイラー・オプションおよびリスト自体に関する詳細については、XL C/C++ コンパイラー・リストを参照してください。

シンボリック・デバッガー・サポート

ユーザーのプログラムをデバッグするときには、 gdb または 他の任意のシンボリック・デバッガーを使用することができます。