Intel C++ Compiler
開発元 | インテル/XLsoft |
---|---|
最新版 | |
リポジトリ | |
対応OS | Windows XP / Vista/7 / Server 2003 / Server 2008 / HPC Server 2008 / Linux / Mac OS X / Android |
プラットフォーム | x86(IA-32), IA-64, x64(Intel64) |
種別 | コンパイラ/デバッガ |
ライセンス | インテル独自ライセンス (プロプライエタリ)※30日評価版有、Linux向け無償版(非商用)有 |
公式サイト | XLsoft |
Intel C++ Compiler (インテル シープラスプラス コンパイラ)とはインテルが開発・販売しているC++コンパイラである。日本での販売・サポートはXLsoftがおこなっている。略称はICC、あるいはICL(それぞれ、Linux/Mac OS X用およびWindows用コンパイラの実行プログラム名にもとづいている)。
概要
インテルが自社の発売するCPUの性能を最大限発揮するために開発したコンパイラである。CPUの開発元が自ら開発しただけあって高い最適化能力を誇り、最新のCPUへの命令セットへの対応も非常に早い。バージョン11.1においては、次世代256ビット命令であるIntel AVXや、米国標準暗号方式であるAES命令セットがサポートされている。また、バージョン11においては、次期C++標準規格(C++11、旧称C++0x)で採用されることが予定されているラムダ式などの構文を早くもサポートした。バージョン14においては、主要なC++11機能をほぼ網羅している[1]。ただしVisual C++でサポートされているC++/CLIやC++/CXの機能は使用できない。
最適化性能の面では、特にSIMD命令を使用した自動ベクタライズ機能が優秀であり、他のコンパイラとの生成バイナリの速度差の大半はこの機能が原因といってもよいくらいである。ただし、自動化といっても限定的な状況でしか適用されず、手動で慎重にベクタライズされたコードにはかなわない。
他にもプロファイル計測用バイナリを出力し、実際に運用することによりコードの実行状況のデータを収集し、それを元に最適化するプロファイリング機能やOpenMPによるマルチスレッド化にも対応している。バージョン11からは1パッケージで多言語対応となった。
実行に必要なライブラリやリンカなどは付属していないため、他のコンパイラの環境に寄生した形で実行される。WindowsではMicrosoft Visual Studioが、LinuxではGCCが必要である。基本的にはコンソールアプリケーションであるが Visual Studio 向けのプラグインが存在するため統合開発環境でも利用が可能である。 IA-32をターゲットとする場合は、無料版であるVisual C++ Express Editionが利用可能である(ただしコンソールでの利用のみ可)。Intel64をターゲットとする場合は有償のMicrosoft Visual Studioが必要である。これは、Visual C++ Express EditionにIntel64用の開発環境が同梱されていないためである。しかし十分な知識のあるユーザーならばWindows SDKを利用してある程度の開発環境を構築することも可能である。
30日無料の評価版があり、使用日期限以外の機能制限は存在しない。正規のライセンスを購入すればそのまま製品版として使用できる。ライセンスには1年間のアップデート入手の権利があり、ライセンス停止後に最新版をダウンロードしてきても使用できないが停止前にリリースされたバージョンはそのまま継続使用できる。ライセンスは更新することによってアップデート入手の権利を保持し続けることが可能である。なお、Linux版では非商用目的に限り無償で使用できるバージョンが公開されている[2]。
その性能の高さから特に画像処理、映像、音声・音響関係で使用される場合が多い。
付属のインテル製ライブラリ
Intel C++ Compiler 11.1 プロフェッショナル エディションには、下記のインテル純正の高性能ライブラリが付属する。
- Intel Integrated Performance Primitives (IPP) - 画像処理・信号処理・動画処理などに最適化されたマルチメディア用ライブラリ
- Intel Threading Building Blocks (TBB) - スレッドセーフ化されたコンテナや同期クラスを含む並列化用C++テンプレートライブラリ
- Intel Math Kernel Library (MKL) - BLAS、LAPACK、FFTなどの高度な演算処理用に最適化された数学ライブラリ
Intel C++ Compiler バージョン10までは、上記ライブラリが付属しないスタンダード エディションが存在したが、バージョン11からはインテルの方針により、プロフェッショナル エディションのみの提供となっている。 なお、これらの各ライブラリは単体製品での販売も行なわれている。
注意点・問題点
バージョン8から実行開始時のCPUチェックでAMDのCPUを認識しないようになったため、AMDのCPUでは出力バイナリの実行性能が劣ってしまう場合がある。開発者の中にはこれを嫌ってあえて古いバージョン7を使用し続ける者もいる。 この問題はCPUチェック処理を独自に記述し、リンク時に強制的に上書きすることで回避することが可能である。
またデフォルトの設定では高速化のため浮動小数点処理で自動的にSSEを使用するようになっている。そのためFPUを使用した場合とでは処理結果に差異が生ずる場合がある。精度重視の設定でコンパイルすることによりFPUを使用するコードを生成することが可能だが速度の方は遅くなってしまう。
コンパイルオプションでマルチCPU対応バイナリを出力することが可能だが、その分コードサイズが増大する傾向がある。
また、Intel C++ Compilerによって出力されたバイナリ(プログラム)の実行時に、Intel C++ Compiler独自のDLLや共有ライブラリが必要となる場合がある(明示的にOpenMPあるいはIPPライブラリを使用していなくても、特定の最適化オプションを有効にすることで、OpenMPあるいはIPPが暗黙的にリンクされる場合がある)。インテルからはランタイムライブラリ(libiomp5md.dllなどを含むパッケージ)が無償配布されているが、Microsoft Visual C++のランタイムとは違って一般のエンドユーザーには公開されておらず、開発者自らがアプリケーションに添付するなどして再配布することになる。しかし、これに留意せずランタイムの再配布や添付を行なわない開発者が多いため、エンドユーザーがプログラムを実行できない症例が多く報告されている[3]。この点に関してはライブラリを静的リンクすることによりコードサイズは増大するがランタイムを必要としないコードを生成することが可能であるが、IPPなどにおいてSIMD拡張命令を使用した高速なバージョンの関数を使用するためには、プロセッサの対応状況を調べるための初期化関数を別途呼び出す必要がある。また、スタティックライブラリ版のIPPはバージョン7.0までの提供となっているため、以降のバージョンでは動的リンクが必須となる[4]。