インテル・コンパイラを使用して、Pentium 4 プロセッサおよび Itanium プロセッサ用にアプリケーションを最適化する方法については、『Optimizing Applications with the Intel C++ and Fortran Compilers for Windows* and Linux』(英語) を参照してください。インテル・ソフトウェア開発製品の詳しい情報については、http://www.intel.co.jp/jp/developer/software/products/ を参照してください。
IA-32 ベース・アプリケーション開発用インテル C++ コンパイラは以下の内容で構成されています。
/doc/ccompindex.htm
) が提供されています。Itanium ベース・アプリケーション開発用インテル C++ コンパイラは、以下の内容で構成されています。
/doc/ccompindex.htm
) が提供されています。このセクションでは、インテル C++ コンパイラ 8.1 の新機能および変更点について説明します。
-cxxlib-gcc
) C++ アプリケーションをリンクする際、これまでのリリースで使用されていた Dinkumware* ライブラリではなく、STL および gcc* C++ ライブラリが使用されるようになりました。これまでどおり Dinkumware ライブラリを使用する場合は、新しいスイッチ -cxxlib-icc
を指定してください。
C コンパイラ・コマンド・ドライバ (icc
) は、ファイル名の拡張子に基づいて使用する言語を判断します。ただし、事前処理されたファイル (*.i
) をコンパイルする場合、icc
ドライバは C 言語を想定し、C++ ドライバの icpc
は C++ 言語を想定します。C++ アプリケーションには、C++ コンパイラ・ドライバを使用することを推奨します。C コンパイラ・ドライバ (icc
) は C++ ライブラリをリンクしないため、生成される実行ファイルのサイズは小さくなります。アプリケーションで C++ ライブラリを使用する必要がある場合は、C++ コンパイラ・ドライバ (icpc
) を代わりに使用してください。
次の新しい事前定義済みマクロが利用可能になりました。
__INTEL_STRICT_ANSI__
は、厳密な ANSI が選択されることを示します。-strict-ansi オプションが指定されると、厳密 ANSI が選択されます。このオプションは、-ansi オプション (gcc の -ansi オプションと互換) よりも、より 厳密 ANSI 規格に準拠します。この事前定義済みマクロは、厳密 ANSI 特有の動作を行う場合にのみ使用してください。__INTEL_RTTI__
は、コンパイルで RTTI が有効になることを示します。このマクロは、-no-rtti オプションが指定されている場合は定義されません。__INTEL_COMPILER_BUILD_DATE
は、YYYYMMDD 形式でコンパイラのビルド日付を示します。この日付は、バージョン・バナーに表示されるビルド日付と同じです。この定義済みマクロを使用して、インテル・コンパイラの特定のアップデートに対応するように、コードを条件付きにすることができます。YYYYMMDD 文字列の値は、新しいリリースに合わせて変更されます。__INTEL_CXXLIB_ICC
は、コンパイル・コマンドラインで -cxxlib-icc が指定されることを示します。このマクロは、使用されている C++ ライブラリに対応するヘッダ・ファイルで使用します。-O3
による高度なループ最適化とメモリ最適化このバージョンでは、-O3 を指定すると、パフォーマンスの向上に役立つ、追加のループ最適化 (交換、分配、折りたたみ) およびメモリ・アクセスの最適化が有効になります。
-fast
の意味の変更バージョン 8.1 では、-fast
を指定すると、オプション -O3 -ipo -static -xP
が指定されます。
-[no-]global-hoist
最適化オプション -[no-]global-hoist
は、ホイスト・ロードおよびスペキュレーティブ・ロード (プログラム実行時にメモリ・ロードをソース内の位置よりも前のポイントに移動する最適化プロセス) を制御するオプションです。ほとんどの場合、これらのオプションは安全にパフォーマンスを向上させることができます。デフォルトは -global-hoist
(最適化有効) です。
しかし、共有メモリまたは動的にマップされたメモリを使用するアプリケーションでは、ロードが実行ストリームで非常に前 (例えば、メモリがマップされる前) に移動されると問題が発生します。これらの最適化を無効にするには、マップされたメモリまたは共有メモリを参照するソース・ファイルをコンパイルするときに -no-global-hoist
オプションを指定します。
-ipo
中間言語のオブジェクト・ファイルへの埋め込み以前のバージョンでは、-ipo
が使用されると、中間言語を含む複数の .il
ファイルが生成され、これらの複数のファイルを makefile でビルドするのは非常に困難でした。このバージョンでは、中間言語は .o
ファイルに埋め込まれるため、複数の .il
ファイルは生成されません。
-ipoN
オプション以前のバージョンでは、-ipo
を指定してマルチファイル IPO 実行すると、リンカへの入力として 1 つのオブジェクト・ファイルのみが生成されていました。これは、バージョン 8.1 でもデフォルトの動作です。バージョン 8.1 で新しくなったのは、リンカへの入力用に複数のオブジェクト・ファイルをコンパイラが作成できるようになった点です。この機能により、大規模なアプリケーションではリンク時間が短くなることがあります。生成されるオブジェクト・ファイルの最大数を指定するには、-ipoN
オプション (N
は作成されるオブジェクト・ファイルの最大数) を使用します。例えば、-ipo4
は最大 4 つのオブジェクト・ファイルを指定します。コンパイラは、アプリケーションのサイズに応じて、最大数以下のファイルを作成します。-ipo0
が指定されると、コンパイラは、アプリケーションの合計サイズに基づいて、オブジェクト・ファイルの適切な数を選択します。
__thread
キーワードのサポートコンパイラは、スレッド・ローカル領域として、gcc 互換の __thread
キーワードをサポートします。この機能の使用方法については、gcc のドキュメントを参照してください。
-fno-exceptions
のサポート (IA-32) –fno-exceptions
オプションは例外処理テーブルの生成をオフにするため、生成されるコードは小さくなります。try ブロック、例外処理仕様、またはthrow 文のような例外処理コンストラクタを使用すると、無視されるかエラーになります。
このオプションが使用されない場合、プリプロセッサ・シンボル __EXCEPTIONS
が定義されます。このオプションが使用された場合は定義されません。
-fno-exceptions
は、Itanium ベース・システムでは現在サポートされていません。
KMP_SCHEDULE
環境変数 新しい環境変数 KMP_SCHEDULE
は、OpenMP でチャンクサイズを指定することなく静的にスケジュールされる並列ループの負荷のバランス調整に使用することができます。デフォルト値は KMP_SCHEDULE="static,greedy"
です。反復結果 (#iterations/#threads) は切り上げられてほとんどのスレッドに割り当てられますが、最後のスレッドに割り当てられる反復回数は少なくなります。これは、以前のコンパイラの動作に相当します。別の値 KMP_SCHEDULE="static,balanced"
を使用すると、反復結果は切り捨てられてほとんどのスレッドに割り当てられ、いくつかのスレッドに割り当てられる反復回数は他のスレッドよりも 1 回多くなります。スレッドに割り当てられる最大の反復回数は同じですが、各スレッドの反復回数が平均化することで、パフォーマンスの向上につながることがあります。
例えば、4 つのスレッドで反復回数が 9 回のループを実行すると、次のようになります。
|
反復回数 |
|||
スレッド 0 |
スレッド 1 |
スレッド 2 |
スレッド 3 |
|
|
3 |
3 |
3 |
0 |
|
3 |
2 |
2 |
2 |
これらのオプションの情報は、『コンパイラ・オプション・クイック・リファレンス・ガイド』の「新規オプション」を参照してください。
IA-32 システム用インテル C++ コンパイラ 8.1 は、Eclipse 統合開発環境 (IDE)、C/C++ 開発ツール (CDT)、および Eclipse を使用するために必要な関連コンポーネントをインストールします。
Eclipse は、オープン・ソースのソフトウェア開発環境プロジェクトで、高度に統合されたツールを開発するための、強力でフル機能を備えた、商用品質の標準プラットフォームを提供することを目的としています。Eclipse は、拡張可能なオープン・ソース IDE で、プラットフォームおよび言語に中立な、ユニバーサル・ツール・プラットフォームです。インテル コーポレーションは、Eclipse Foundation (www.eclipse.org) の支援メンバです。
CDT (C/C++ Development Tools) プロジェクトは、Eclipse のサブ・プロジェクトで、Eclipse プラットフォーム用のフル機能を備えた C/C++ 統合開発環境を提供することを目的にしています。CDT は完全なオープン・ソースで、Eclipse プラットフォームへのプラグインのセットとして Java* に実装されています。
32 ビット・アプリケーション開発用インテル C++ コンパイラは、Eclipse バージョン 2.1.3、CDT バージョン 1.2.1 および BEA* WebLogic* JRockit* JRE バージョン 1.4.2_04 と一緒にパッケージされています。
<INSTALLDIR>/bin/iccec
(<INSTALLDIR>
はインテル C++ コンパイラをインストールしたディレクトリ) を実行してください。デフォルトでは、<INSTALLDIR>
は /opt/intel_cc_80
です。
他のバージョンの Eclipse と CDT を使用することは可能です。ただし、インテルでは、Eclipse バージョン 2.1.3 および CDT バージョン 1.2.1 でのみ、32 ビット・アプリケーション開発用インテル C++ コンパイラの動作を確認しています。
互換性があれば、任意のバージョンの JRE を使用できます。Eclipse を実行、起動するには、適切な JRE が必要です。Eclipse プロジェクト (www.eclipse.org) (英語) のビルド・ページには、その Eclipse のビルドで動作する Java 開発キットと Java ランタイム・ダウンロードのページへのリンクがあります。現在の環境およびライセンス条件に最も適した JRE を選択するようにしてください。インテルでは、インテル C++ パッケージに含まれている JRE と互換性のない JRE については動作を確認していない点にご注意ください。
環境変数 OTHER_JVM_BINDIR
を設定する必要があります。変数 OTHER_JVM_BINDIR
の値を、システムにインストールした JRE の java
ファイル・フォルダのフル・パスに設定します。bash シェルを使用している場合は、この環境変数を export
したか確認してください。
使用できます。適切なファイルとフォルダが作成されていれば、インテル C++ コンパイラは既にインストールされている Eclipse 環境にプラグインされます。<INSTALLDIR>/bin/iccec
ファイル (<INSTALLDIR>
はインテル C++ コンパイラをインストールしたディレクトリ) を使用する場合は、iccec
ファイルの内容を次のように変更する必要があります。
変数 OTHER_JVM_BINDIR
の値を、システムにインストールした JRE の java
ファイル・フォルダのフル・パスに設定します。bash シェルを使用している場合は、この環境変数を export
したか確認してください。
変数 OTHER_ECLIPSE_BIN
の値を、Eclipse インストール・フォルダにある eclipse
バイナリのフル・パスに設定します。bash シェルを使用している場合は、この環境変数を export
したか確認してください。例えば、Eclipse を /opt/intel/eclipse
にインストールした場合、OTHER_ECLIPSE_BIN
は /opt/intel/eclipse/eclipse
に設定されます。(ファイルが存在していることを確認してください)
Eclipse インストール・フォルダ以下 (plugins
および features
と同じレベル) に、links
という名前のフォルダを作成します。作成した links
フォルダに intel.compiler.cdt.link
という名前のファイルを作成します。intel.compiler.cdt.link
ファイルに次の行を追加します。
path="<INSTALLDIR>"
ここで、<INSTALLDIR>
は、インテル C++ コンパイラをインストールしたディレクトリ (デフォルト、/opt/intel_cc_80
) です。
次に、iccec
スクリプトを実行して、使用する Eclipse、CDT および JRE のバージョンを選択します。ライブラリのロードに関してエラーが発生する場合は、LD_LIBRARY_PATH
に Eclipse ライブラリのフォルダが含まれていることを確認してください。
IA-32 システムでインテル C++ コンパイラをインストールしたときに "Intel(R) C++ Compiler features and plugins for integration into Eclipse* CDT development environment, Version 8.1" で intel-icc_ide8-8.1-xxx.i386.rpm をインストールしなかった場合、次の 2 つの方法でこのコンポーネントをインストールすることができます。
コンパイラのインストール・プログラムを実行して、メイン・メニューでオプション 3 (Eclipse Package) を選択します。このオプションを選択すると、インストール・プログラムはインストールされていないインテル C++ の機能とプラグインを検出して、これらをインストールするオプションを提供します。このコンポーネントをインストールするように選択します。コンポーネントのインストールが完了したら、Eclipse Package の残りのコンポーネントをインストールするか、インストール・プログラムを終了するかを選択できます。
インテル C++ コンパイラをアンインストールしてから、"features and plugins" コンポーネントを選択してコンパイラを再インストールする。この場合、パッチとして提供されている製品のアップデートを再インストールする必要がある点に注意してください。
Eclipse Foundation の Web サイト (http://www.eclipse.org/) を参照してください。Eclipse FAQ (http://www.eclipse.org/eclipse/faq/eclipse-faq.html) (英語) には、導入についての情報およびオンライン・ドキュメントが掲載されています。
ecc
から icc
、ecpc
から icpc
に変更されたことに注意してください。現在、以前のドライバ名はサポートされていますが、今後、廃止される可能性がありますのでご注意ください。 /usr/lib/crt1.o: In function `_start':
/usr/lib/crt1.o(.text+0x18): undefined reference to `main'
icc: Command line error: no files specified; for help type "icc -help"
ただし、実行ファイルにはインテル共用ライブラリの場所が含まれていないため、その場所を指定する必要があります。次のいずれかの方法で指定できます。 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<install_dir>/lib
" と入力する。ldconfig
システム・ユーティリティを使用する。(注: ユーティリティの実行には、root ユーザ権限が必要です。) <install_dir>/bin/icc.cfg
を変更する。
error while loading shared libraries: libcprts.so.5: cannot open shared object file: No such file or directory
新しいインテル Pentium 4 プロセッサは、複素数データ型、浮動小数点から整数への変換、および水平加算を含むベクトル化ループのパフォーマンスを向上させる新しいストリーミング SIMD 拡張 3 (SSE3) 命令セットをサポートしています。
バージョン 8.0 では、SSE3 をサポートするインテル・プロセッサ用の最適化機能が追加されました。この機能を使用するには、-xP
または -axP
オプションを指定します。詳細は、『インテル® C++ コンパイラ・ユーザーズ・ガイド』の「最適化」のセクションを参照してください。
このリリースでは、2 つの新しいコード生成オプションが追加されました。-xB
および -axB
は、インテル Pentium M プロセッサで最高のパフォーマンスを引き出すコードを生成するようにコンパイラに指示します。新しい -xN
および -axN
オプションは、すべてのインテル Pentium 4 プロセッサ向けに最適化します。Pentium 4 プロセッサで最高のパフォーマンスを引き出すため、新しい -xN
および -axN
オプションを使用することを推奨します。Pentium M プロセッサの場合は、-xB
または -axB
オプションを使用してください。詳細は、『インテル® C++ コンパイラ・ユーザーズ・ガイド』の「最適化」のセクションを参照してください。
最適化オプション -[a]xi
(Pentium Pro および Pentium II 用に最適化) および -[a]xM
(MMX(R) 命令セット用に最適化) は、最新のインテル C++ コンパイラではサポートされていません。これらのオプションがコンパイラのコマンドラインで指定されると、メッセージが表示され、オプションは無視されます。-[a]xi
または -[a]xM
オプションを使用している場合、これらのオプションの使用を中止してください。デフォルトで生成される汎用コードは、Pentium プロセッサ上でも新しい IA-32 プロセッサ上でも動作します。
-[a]xW
(Pentium 4 用の低い最適化レベル) は、将来のバージョンで削除される予定です。インテル Pentium 4 プロセッサ用のコードを生成する場合は、-[a]xW
のかわりに -[a]xN
オプションを使用してください。
詳細は、『インテル® C++ コンパイラ・ユーザーズ・ガイド』の「最適化」のセクションを参照してください。
新規の -cxxlib-gcc
オプションを使用すると、gcc が提供する C++ ランタイム・コンポーネントを使用してアプリケーションをビルドできます。gcc の C++ ランタイムには、libstdc++ 標準 C++ ヘッダファイル、ライブラリ、および言語サポートが含まれています。このオプションが指定された場合は、libcprts 標準 C++ ヘッダ、ライブラリ、およびインテル・コンパイラが提供する libcxa と libunwind の C++ 言語サポートの代わりに上記のコンポーネントが使用されます。
-cxxlib-gcc
オプションでアプリケーションのコンパイルとリンクを行って生成された C++ オブジェクト・ファイル、ライブラリ、実行ファイルは、gcc 3.2 で生成された C++ オブジェクト・ファイル、ライブラリ、実行ファイルと相互運用が可能です。これは、インテル・コンパイラ 8.0 で生成された C++ コードが gcc 3.2 でビルドされたサードパーティの C++ ライブラリとともに使用できることを意味します。
__GNUC__、__GNUC_MINOR__、および GNUC_PATCHLEVEL__
の各マクロが定義されています。これらのマクロを定義しない場合は、-no-gcc
オプションを指定してください。さらに、Linux 版インテル C++ コンパイラのこのバージョンでは、ご使用の Linux に付属の C ヘッダが使用されます (Itanium アプリケーション用の Itanium コンパイラでのみ使用される 2 つの小さな代用ヘッダを除く)。また、-ansi
言語モードを使用する場合は、-cxxlib-gcc
スイッチにより、GNU* C++ ライブラリ・ヘッダがコンパイルされるようになりました。
デフォルトでは、インテル・ コンパイラ 8.1 の事前定義マクロの -D__NO_INLINE__
と -D__NO_STRING_INLINES
を除き、gcc 3.2 で使用されているパスと同じヘッダのパス (条件付きコード) が使用されます。これらの事前定義マクロは、gcc 3.2 との相互運用性には影響がありません。
GNU C++ min/max 演算子が実装されました。詳細は、http://gcc.gnu.org/onlinedocs/gcc/Min-and-Max.html (英語) を参照してください。
新規に実装された gcc 属性は次のとおりです:
インテル C++ コンパイラ 8.0 には多くの gcc 組込み関数が実装されています。gcc 組込み関数に関しては、http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html (英語) を参照してください。サポートされている gcc 組込み関数のリストは、『インテル® C++ コンパイラ・ユーザーズ・ガイド』にあります。
-ansi
スイッチの更新-ansi
スイッチが更新され、同じ名前の gcc コマンドライン・オプションと互換性が保たれるようになりました。インテル・コンパイラは、-strict_ansi
コマンドライン・オプションで、より厳しい ISO C および C++ へのセマンティクスの適合性をサポートします。CPATH , C_INCLUDE_PATH , CPLUS_INCLUDE_PATH
-I
オプションに変換します。DEPENDENCIES_OUTPUT , SUNPRO_DEPENDENCIES
Linux 版インテル C++ コンパイラでは、プリコンパイル済みヘッダの手動処理と自動処理がともにサポートされるようになりました。適切な状況下でこの機能を使用することにより、コンパイル時間を大幅に短縮できます。詳細は、ユーザーズ・ガイドを参照してください。
プリコンパイル済みヘッダの自動処理を行うには、コンパイル・オプションに -pch
を追加します。1 回目のコンパイルでは .pchi
ファイルの作成に多少時間がかかりますが、2 回目以降のコンパイルでは、作成された .pchi
ファイルを利用できるため、処理速度が向上します。
> icc -c -pch file1.cpp
"file1.cpp": creating precompiled header file "file1.pchi"
> icc -c -pch file1.cpp
"file1.cpp": using precompiled header file "file1.pchi"
ディスク容量に制限がある場合、プリコンパイル済みヘッダの数を 1 つにすることができます。これを行うには、新しいヘッダファイル common.h を作成して、次の例のように重要なヘッダを含めます。common.h:
#include "myheader1.h"
#include "myheader2.h"
#include <iostream>
各ソースファイルに common.h
を含めて、その直後に #pragma hdrstopIn
を含めます。
file1.cpp:
#include "common.h"
#pragma hdrstop
#include "otherheader1.h"
file2.cpp:
#include "common.h"
#pragma hdrstop
#include "otherheader2.h"
コンパイル:> icc -c -pch file1.cpp
"file1.cpp": creating precompiled header file "file1.pchi"
> icc -c -pch file2.cpp
"file2.cpp": using precompiled header file "file1.pchi"
プリコンパイル済みヘッダは 1 つしか作成されないため、使用するディスク容量が減少し、コンパイル時間を短縮できます。
-ip
オプションおよび -ipo
オプションのデバッグサポートの向上-ip
オプションおよび -ipo
オプションのデバッグサポートが向上しました。一部の変数の情報が利用できます (ただし、最適化の影響により、値が必ずしも正確であるとは限りません)。-Wbrief
は、1 行の簡単な診断を出力します。-Wcheck
は、移植不能な構造の診断を有効にします。-Wp64
は、64 ビット・ポーティングの特定の警告を有効にします。-fpstkchk
このオプションは、FP スタックが確実に予測された状態にするためにすべての関数/ルーチンの呼び出し後に補足コードを生成します。関数呼び出しが FP 値を返す場合、戻り値は FP スタックの最上位に配置されます。戻り値が未使用の場合、コンパイラは正しい状態で FP スタックを維持するために FP スタックから値をポップします。しかし、アプリケーションがこのような関数を呼び出して、関数のプロトタイプを省略するか、関数のプロトタイプを正しく行わない場合、その関数が FP 値を返す必要があるかどうかをコンパイラが判断できず、必要な場合でも FP スタックからその値がポップされません。この結果、FP スタックが最終的にオーバーフローすることがあります。一般に、FP スタックがオーバーフローすると、NaN 値が FP 計算で用いられるため、プログラムの結果が異なるか、または他のエラーが生じることがあります。その際、エラーが生じた場所が、実際の問題の箇所とは異なっていることもあります。このオプションは、不正な呼び出しが発生した直後にアクセス違反例外を知らせるので、これらの問題をより簡単に見つけることができます。
libguide
libguide
ライブラリは、デバッグすることが難しいパフォーマンス問題を引き起こす可能性があります。コンパイラは、コマンドライン・オプションに関わらず、libguide
を動的にリンクします。インテル・コンパイラのコード・カバレッジ・ツールをさまざまな方法で活用して、開発効率を改善し、問題を減少し、アプリケーションのパフォーマンスを向上させることができます。ツールをテストスペースのアプリケーション・プロファイルに適用すると、カバレッジ情報に基づいてテストの全体の質を測定することができます。同様に、パフォーマンス・ワークロードのプロファイルに適用すると、コード・カバレッジ情報により実行されたワークロードが、アプリケーションの重要なコードをどの程度カバーするかを把握できます。インテル・コンパイラが提供するプロファイルに基づく最適化の利点を享受するには、パフォーマンス・クリティカルなモジュールの高いカバレッジが必要です。また、このツールは、アプリケーションの各基本ブロックの動的実行カウントを表示して、カバレッジとパフォーマンス・チューニングの両方に有用な情報を示すオプションを提供します。カバレッジ・ツールは、アプリケーションの 2 つの異なる実行におけるプロファイルを比較できます。この機能は、アプリケーションがカスタマなどによってテストスペース外で実行される場合、アプリケーションのテストでカバーされないアプリケーションのコードの部分を検索するのに使用することができます。
インテル・コンパイラのコード・カバレッジ・ツールは、Windows/Linux 上のインテル・アーキテクチャ 32 ビット・プロセッサ・ファミリおよび Itanium プロセッサ・ファミリでサポートされます。また、C、C++、および Fortran をシームレスにサポートします。
テスト・プライオリタイゼーション・ツールは、インテル・コンパイラのプロファイルに基づく最適化テクノロジを利用して、以前のアプリケーションの実行プロファイルを基に、アプリケーションのテストの選択と重要度付けを行います。ユーザは、このツールを使用して、アプリケーションのコードのサブセットに対してより適切なテストを選択し、重要度付けを行うことができます。アプリケーションの特定のモジュールが変更されると、テスト・プライオリタイゼーション・ツールはそのセットの変更によって最も影響を受けるテストを示唆します。また、以前に実行されたアプリケーションのプロファイル・データを分析して、アプリケーションのコンポーネントとテストの依存性を確認し、この情報を基にテストのプロセスをガイドします。このツールは、アプリケーションのコード・カバレッジを基に、効率的なテスト階層を作成するのに使用できます。例えば、テストの全体をカバーするアプリケーション・テストの最小サブセットを定義します。また、テストのターンアラウンド時間を大幅に短縮します。長い時間を費やして多くの失敗を見つける代わりに、ユーザは、セットの変更によって問題が発生する少数のテストをすばやく見つけられます。このツールはまた、テストがボトルネックとなる大規模なアプリケーションのテストと開発に要する時間を大幅に短縮するのに役立ちます。アプリケーションの任意のサブセットで全体をカバーするために必要なテストの数を最小限にし、さらに、テストの実行時間が決まっている場合は、特定のレベルのコード・カバレッジを最小限の時間で達成するテストを選択して重要度付けを行うことができます。
インテル・コンパイラのテスト・プライオリタイゼーション・ツールは、Windows/Linux 上のインテル・アーキテクチャ 32 ビット・プロセッサ・ファミリおよび Itanium プロセッサ・ファミリでサポートされます。また、C、C++、および Fortran をシームレスにサポートします。
詳細に関しては、次のリンクを参照してください: http://www.intel.com/software/products/compilers/techtopics/pgt.htm (英語)
.il
).il
ファイルには、バージョン番号が割り当てられます。コンパイラは、同じバージョンの .il
ファイルのみを処理します。バージョン番号はビルド処理の一部として、自動的に生成され、更新されます。-nostdlib
を指定した場合やインテル C++ コンパイラのドライバからではなく、直接リンカを呼び出したことにより、標準のインテル・ライブラリに対してリンクが行われない場合の問題について次に説明します。インテル C++ コンパイラは、_intel_fast_memcpy
と _intel_fast_memset
の 2 つのルーチンを使用して、ソースコードでは __builtin_memcpy
と __builtin_memset
にマクロ展開されていない memcpy 演算と memset 演算を行います。これらは、libirc
にあります。gcc
コンパイラを使用してアプリケーションをリンクしたり、リンカ ld
を直接呼び出すと、これらの 2 つのルーチンが未解決のシンボルになります。このため、コンパイル・フェーズで使用したコンパイラ・オプションと同じものを使用して、インテル C++ コンパイラでリンクすることを推奨します。ただし、これらのルーチンを未定義の外部参照とみなす場合は、-lirc
をリンク行に追加するか、または memcpy
および memset
が組込み形式にマクロ展開されるようにインクルードを変更して、再コンパイルします。IA-32 ベース・アプリケーション用インテル C++ コンパイラは、任意のプログラムのメインルーチンから intel_proc_init
ルーチンを呼び出し、プロセッサが正しく設定されるようにします。また、このルーチンは libirc
にも含まれています。これらのルーチンは glibc
からのエントリポイントを使用するので、コマンドラインでは -lirc
を -lc
の前に配置する必要があります。
gcc
の動作と一致するように変更されました。const データは読み込み専用データ・セクションに配置され、文字列リテラルも同様に読み込み専用セクションに配置されます。以前の動作に依存しているアプリケーションでは、バージョン 8.0 で追加された -fwritable-strings
コンパイラ・オプションを使用する必要があります。Itanium コンパイラのバージョン 7.1 では、すべての次元定数と文字列リテラルを書き込み可能なデータ・セクションに配置していました。バージョン 8.0 では、デフォルト動作は gcc の動作と一致するように変更されました。次元 const データは読み取り専用データ・セクションに配置され、文字列リテラルも読み込み専用セクションにデフォルトで配置されます。以前の動作に依存しているアプリケーションでは、バージョン 8.0 で追加された -fwritable-strings
コンパイラ・オプションを使用する必要があります。
-fwritable-strings
オプションは、文字列リテラルを書き込み可能なデータ・セクションに配置する、gcc と互換性があるオプションです。これは、文字列への書き込みを前提とするアプリケーションの下位互換のために提供されています。
共有ライブラリを使用する際は binutils 2.14 以降を使用してください (binutils 2.11 には問題があることが報告されています)。
注: 数千行にも及ぶ非常にサイズの大きいソース・ファイルを、高度な最適化オプション (-O3、-ipo
、-openmp
など) をつけてコンパイルする際は、さらに大容量の RAM が必要となります。
インテル C++ コンパイラのインストール・スクリプトは、システム・ユーティリティ RPM を使用してファイルをインストールします。RPM 4.0.2 および RPM 4.1 の両方に制限があるので注意してください。詳細は「既知の制限事項」を参照してください。
インテル C++ コンパイラは、Macrovision 社の FLEXlm* 電子ライセンス・テクノロジを使用しています。ライセンスの管理は透過的に行われます。インテル C++ コンパイラ 8.1 のインストール・プログラムは、製品コンポーネントをインストールする前に有効なライセンスをチェックします。また、プログラムのコンパイル時とビルド時にもライセンス・ファイルのチェックを行います。
インテル・ソフトウェア用の FLEXlm ライセンス・デーモンは、フローティング・ライセンスおよびノードロック・ライセンスで使用され、多くの一般的なプラットフォームで利用できます。ライセンス・デーモンは、ローカル・ネットワーク上のアクセス可能な任意のサポートされているプラットフォーム上にインストールされます。コンパイラ CD には、さまざまな Linux ディストリビューション用のライセンス・デーモンが含まれています。CD をお持ちでない場合、または別のプラットフォーム用のライセンス・デーモンが必要な場合は、インテル・プレミア・サポート (英語) の [Downloards] セクションからライセンス・デーモンをダウンロードしてください。
注: サポート・サービスの有効期間内であれば、Linux 版インテル C++ コンパイラの既存のライセンスをバージョン 8.1 でもそのまま使用できます。
インストール前に、以下の手順に従ってライセンス・ファイルをセットアップしてください。
.lic
" です。/opt/intel_cc_80/licenses/
> tar -xvf l_cc_p[c]_8.1.xxx.tar
> tar -zxvf l_cc_p[c]_8.1.xxx.tar.gz
> source ./install.sh
rpm2cpio
を使用して RPM ファイルを手動で解凍し、iccvars.sh
(.csh
) ファイルを編集してコンパイラのインストール先ディレクトリを含めると、root 権限なしでもコンパイラをインストールできます。インストール・スクリプトでは、この手順を自動的に行います。*.lic
) を保存したディレクトリです。インストール・プログラムは、Linux コンポーネントのインテル C++ コンパイラをインストールする前に、有効なライセンスをチェックします。Intel Compiler for 32-bit applications
(IA-32 システムにインストールする場合) または Intel Compiler for Itanium architecture
(Itanium ベース・システムにインストールする場合)Linux Application Debugger for 32-bit applications
または Linux Application Debugger for Itanium®-based applications
Eclipse Package
-U --replacefiles --force
を使用することを推奨します。デフォルトのインストール・ディレクトリは、インテル C++ コンパイラでは /opt/intel_cc_80/
、インテル・デバッガでは /opt/intel_idb_80/
です。'x'
を入力してインストール・スクリプトを終了します。注: コンパイラをインストールすると、Eclipse 統合コンポーネントもインストールされます (Eclipse パッケージを選択した場合)。Eclipse のみをインストールすることはできません。これらのコンポーネントは、<install_dir>/eclipse/features
および <install_dir>/eclipse/plugins
にインストールされます。このため、コンパイラのインストール中に Eclipse の使用許諾契約に同意するかどうかを確認するメッセージも表示されます。
(install.sh)
は、これらの変数を設定するコンパイラ環境スクリプト・ファイル (iccvars.sh/ idbvars.sh)
を作成します。これらのスクリプト・ファイルをログイン・スクリプト (.login
ファイル) に追加することを強く推奨します。".login"
ファイルで一旦、変数が設定されれば、セッションごとにスクリプト・ファイルを実行する必要がなくなります。コンパイラ環境を設定するスクリプトの実行
> source <install-dir>/bin/iccvars.sh(.csh)
> source <install-dir>/bin/idbvars.sh(.csh)
また、インストール・プログラムにより、すべてのコンパイル処理に共通の設定を含むコンパイラ設定ファイル (<install-dir>/bin/icc.cfg
) が IA32 システムまたは Itanium ベース・システム上に作成されます。これらのファイルを編集して、デフォルトのオプションを追加することができます。注: コンパイラのアップデート・パッケージをインストールする場合は、変更した設定ファイルを別のファイル名で保存し、ファイルが上書きされないようにする必要があります。
製品のインストールが完了したら、サポートへ登録してください。登録方法については、「テクニカル・サポート」を参照してください。
<compiler-install-dir>/bin/uninstall.sh
/opt/intel_cc_80/bin/uninstall.sh
<debugger-install-dir>/bin/uninstall.sh
/opt/intel_idb_80/bin/uninstall.sh
RPM 4.0.2 はデフォルト以外のディレクトリにはインストールできません。この問題は RPM 4.0.3 で修正されています。また、RPM 4.1 もデフォルト以外のディレクトリにはインストールできません。この問題は RPM 4.11 から 4.2 で修正されています。
インテル C++ コンパイラ 8.1 パッケージから IA-32 または Itanium ベース・アプリケーション用インテル・デバッガのバージョン 8.1 をインストールする場合、既にインストールされているインテル・デバッガのバージョン 7.1、7.2 または 7.3 は、8.1 にアップグレードされます。
大きなサイズのスタックを必要とする POSIX スレッドのプログラムの場合、一部の Linux のバージョンでは正常に動作しないことがあります。これは、Linux の POSIX スレッド・ライブラリのバージョンによっては、ハードコード化されたスタックサイズに制限があるためです。インテル・コンパイラでは POSIX スレッド・ライブラリを使用して OpenMP ベースおよび自動生成による並列化を実装しているため、上記の制約は OpenMP プログラム (-openmp)、およびインテル・コンパイラで自動生成された並列プログラム (-parallel
) にも適用されます。通常、スタックの容量制限を超過したスレッド・プログラムを実行すると、セグメンテーション違反またはアドレシング・エラーが発生します。
この制約を回避するには、FLOATING_STACKS
パラメータが定義されている glibc のバージョンを使用するようにしてください。いくつかのディストリビューションでは、これは pthreads ライブラリのスタティック・バージョンではなく、共用バージョンを使用することを意味します。そして、ulimit -s
または limit stacksize
コマンドを実行して、最大シェル・スタック・サイズを (unlimited
ではない) 十分な大きさの値 (単位:KB) に設定し、さらに環境変数 KMP_STACKSIZE
を必要なスレッド・スタック・サイズ (単位:バイト) に設定してください。bash シェルでは、ulimit -s
コマンドを使用して最大スタックサイズを設定できるのは 1 回のみであることに注意してください。C シェル (csh) では、limit stacksize
を使用することで、最大スタックサイズを何回でもリセットできます。
上記の回避方法は RedHat 7.2 Linux ディストリビューションの glibc バージョン 2.2.4-13 (IA-32 版) および glibc 2.2.4-19 (Itanium プロセッサ・ファミリ版) で検証済みです。IA-32 版の glibc 2.2.4-13 に関しては、POSIX スレッド・ライブラリの共用バージョンを必ず使用してください (コンパイラの .cfg ファイル、またはコマンドラインで -static
フラグを使用しないでください)。
-g
とインライン化を組み合わせた場合のコンパイル時間の増加 -g
をインライン化と組み合わせて使用すると、コンパイル時間が長くなります。-ipo、-ip
を指定した場合や -O1
以上のオプション・レベルで C++/C99
プロブラムをコンパイルする場合、インライン化が発生します。これはデバッグ情報が生成されるためです。多くのアプリケーションでは、このコンパイラ・オプションの組み合わせは、コンパイル時間またはコンパイル時のメモリ容量を増加させません。
-use_msasm
コンパイル・フラグが設定されている場合、GNU asm エイリアスは __asm__
キーワードを使用した場合にのみ正常に動作します。__asm
または asm
キーワードを使用した場合は正常に動作しません。
次の問題は、将来のバージョンで解決される予定です。
-qipo_separate
が xild
で認識されない -qipo_separate
オプションは xild
で認識されません。これは、このオプションを使用した IPO コンパイルが失敗するためです。
-ipo
オプションで指定した .o および .s ファイルの明示的な名前が無視されるipo_c
または -ipo_S
(.o または .s ファイルの名前を明示的に指定する) オプションを使用してファイル名を明示的に指定した場合、コンパイラは複数のオブジェクトを生成するときにこれらの指定を無視します。
-ipo_S
で生成された s ファイルが複数オブジェクト IPO でアセンブルできない2 つの問題があります。
printf
ステートメント中の文字列) が定義されていないと解釈する。この問題は、Itanium ベースの Linux システムでのみ発生します。(-ax*
) 使用時のデバッグ情報の制限-ax{W|N|B|P}
を使用してコンパイルを行うと、各関数について IA-32 ジェネリック・コードと CPU 特有のコードの 2 種類のコードが生成されます。各関数のシンボルは自動 CPU ディスパッチ・ルーチンを参照して、ランタイムに実行するコード・セクションを決定します。これらの関数にデバッガのブレークポイントが名前でセットされると、ディスパッチ・ルーチンでアプリケーションが停止します。その結果、デバッグ時に予測できない動作が発生します。この問題は、インテル・デバッガおよびインテル・コンパイラの将来のバージョンで修正される予定です。
-fp
オプションを使用しないでビルドされた IA-32 プログラムをデバッグまたはトレースバック表示できない-fp
を使用してコンパイルを行うと、IA-32 EBP レジスタは汎用レジスタではなくフレーム・ポインタとして使用されます。デバッガおよびトレースバック・ハンドラは、-fp
を使用しないでコンパイルされた関数への呼び出しを含むスタックから適切にスタックを戻すことができません。-g
または -O0
を使用してコンパイルすると、-fp
は暗黙的に有効になりますが、より高い最適化レベル (-O2
など) を明示的に指定した場合は有効になりません。アプリケーションでデバッガまたはトレースバックを使用する場合で、-O0
よりも高い最適化レベルを使用する場合は、デバッガおよびトレースバック・ハンドラがフレーム・ポインタを使用できるように、-fp
も指定してください。
-xP
オプションを使用して生成されたコードを認識しないGNU アセンブラの古いバージョンは、-[a]xP
オプションを使用して生成されたアセンブリ・コードを処理できません。この問題が発生した場合は、binutils バージョン 2.14.90.0.4.1 以降、または FSFbinutils 2.15 以降を使用してください。
gdb
デバッガとインテル・コンパイラ Linux 版インテル・コンパイラは、Dwarf2 の高度な機能 (クラス内でネストされた宣言など) を含む、Dwarf2 形式のデバッグ情報を生成します。バージョン 5.3.90-* のような、古い gdb
デバッガは、これらの Dwarf 機能を正しく処理できないことがあります。C++ の表現をフルに使用するソース・コードを正しく処理するためには、gdb
のバージョン 6.1 以降を使用してください。
最新バージョンのインテル C++ コンパイラに関する既知の制限事項および注意事項については、以下のリンク先を参照してください。
[Registration Center]
をクリックして登録します。インテル C++ コンパイラのユーザ・フォーラム、FAQ、ヒント、およびその他のサポート情報は、http://support.intel.com/support/performancetools/c/linux/ (英語) を参照してください。サポート情報全般については、http://www.intel.com/software/products/support/ (英語) を参照してください。
[Submit]
ボタンをクリックします。[I Accept]
ボタンを押します。[Product]
ドロップダウン・リストの隣の [Go]
ボタンをクリックします。[Submit Issue]
リンクをクリックします。[Product Type]
ドロップダウン・リストから [Development Environment (tools,SDV,EAP)]
を選択します。[Product Name]
ドロップダウン・リストから [Intel C++ Compiler, Linux*]
を選択します。 > uname -a
> rpm -qa | grep glibc
rpm
をインストールしている場合は、下記のコマンドを実行します。 > ls /lib/libc*
下記のコマンドで、インテル C++ コンパイラのパッケージ ID を取得します。
> icc -V
出力された [Package ID] (例:.l_cc_p[c]_8.1.xxx
) をプレミア・サポートの適切なフィールドにコピーします。また、問題の解決に役立つと思われる事項はすべてお伝えください。
README
(例: l_cc_p[c]_8.1.xxx_README
) を参照してください。
ドキュメントは、<install_dir>/doc
(デフォルト: /opt/intel_cc_80/doc
) ディレクトリにインストールされます。HTML 版のドキュメント・インデックスは、<install_dir>/doc/ccompindex.htm
(デフォルト: /opt/intel_cc_80/doc/ccompindex.htm
) です。インタラクティブ形式 (HTML ベース) のトレーニング・チュートリアル、『Enhancing Performance with Intel Compilers』(英語) もドキュメント・インデックスのリンクからアクセスできます。このチュートリアルでは、IA-32 および Itanium ベース・システムにおけるアプリケーションの最適化に役立つコンパイラ・オプションと Itanium アセンブラについて説明します。『Intel® Debugger Manual』(英語) は、インテル・デバッガの doc ディレクトリにあります (デフォルトのディレクトリは、/opt/intel_idb_xx/doc
です。xx: は、"idb -V
" を実行すると表示される、idb のバージョン番号です)。
『インテル(R) C++ コンパイラ・ユーザーズ・ガイド』は、次のように複数のドキュメントで構成されています。
GNU glibc C 言語ライブラリについての情報は、Linux OS のベンダ、または GNU の Web サイト www.gnu.org でドキュメントを入手してください。
icc
(1) manpage では、コマンドライン・オプションおよび icc
と icpc
コンパイラ・コマンドに関する情報のリストが提供されています。icc
(1) manpage を表示するには、S<install_dir>/bin/iccvars.*sh
ファイルを実行する source コマンドを使用して環境を設定してから、次のコマンドを入力してください。 $ man icc
man
コマンドは、表示された内容のスクロール、文字列の検索、特定の場所へのジャンプ、その他の機能を実行する単一キーまたはキーの組み合わせを提供します。例えば、z
を入力すると次の画面、w
を入力すると前の画面を表示します。man コマンドのヘルプを表示するには、h
キーを入力します。ヘルプを閉じるには、q
キーを入力して、表示されている manpage に戻ります。検索するには、/
文字を入力してから検索する文字列 (/string
) を入力して、Enter を押します。man コマンドのテキストの表示後、q
を押してシェル・コマンドのプロンプトに戻ります。xpdf
ユーティリティ (検索機能を含む) を使用するか、gv
または ghostview
コマンドを使用します。いくつかの Linux ディストリビューションでは、mozilla
を使用すると PDF helper を使用して PDF ファイルが表示されます。
インテル・ソフトウェア開発製品の詳しい情報については、http://www.intel.co.jp/jp/developer/software/products/ を参照してください。
関連製品の一部を次にリストします。
本資料に掲載されている製品のうち、外国為替および外国為替管理法に定める戦略物資等または役務に該当するものについては、輸出または再輸出する場合、同法に基づく日本政府の輸出許可が必要です。また、米国産品である当社製品は日本からの輸出または 再輸出に際し、原則として米国政府の事前許可が必要です。
【資料内容に関する注意事項】
本ドキュメントの内容を予告なしに変更することがあります。
インテルでは、この資料に掲載された内容について、市販製品に使用した場合の保証あるいは特別な目的に合うことの保証等は、いかなる場合についてもいたしかねます。また、このドキュメント内の誤りについても責任を負いかねる場合があります。
インテルでは、インテル製品の内部回路以外の使用にて責任を負いません。また、外部回路の特許についても関知いたしません。
本書の情報はインテル製品を使用できるようにする目的でのみ記載されています。
インテルは、製品について「取引条件」で提示されている場合を除き、インテル製品の販売や使用に関して、いかなる特許または著作権の侵害をも含み、あらゆる責任を負わないものとします。
本書に含まれている内容は、出荷時の内容を正確に著すよう記述されていますが、製品の不具合の発見とその改良に伴い、製品および本書の内容は予告なく変更される場合があります。現在報告されているソフトウェアの不具合につきましては、お問い合わせください。
いかなる形および方法によっても、インテルの文書による許可なく、この資料の一部またはすべてを複写することは禁じられています。
著作権法で許可されている場合を除き、文書による事前の許可なく、複製、改変、または翻訳することを禁じます。無断転載を禁じます。
版権制限:米国政府による使用、複製、または開示は、DFARS 252-227-7013 の条項「Rights in Technical Data and Computer Software」の副項 (c)(I)(ii) に規定されている制限を受けます。
非 DOD U.S. Government Departments and Agencies の権利は、FAR 52.227-19(c0(1,2) に規定されています。
Intel、インテル、Itanium、MMX、Pentium、および VTune は、アメリカ合衆国およびその他の国における Intel Corporation またはその子会社の商標または登録商標です。
* その他の名称およびブランド名は、各社の商標および登録商標です。
© 2004 Intel Corporation. 無断での引用、転載を禁じます。