Intel C++ Compiler

**Intel C++ Compiler** （**インテル シープラスプラス コンパイラ**）とはインテルが開発・販売しているC言語およびC++用のコンパイラである。日本での販売・サポートはXLsoftが行なっている。略称は**ICC**、あるいは**ICL**（それぞれ、Linux/macOS用およびWindows用コンパイラの実行プログラム名にもとづいている）。

## 概要
インテルが自社の発売するIntel CPUの性能を最大限発揮するために開発したコンパイラである。Intel CPUの開発元が自ら開発したため、Intel CPUに対しては最高の最適化性能を誇り、最新の命令セットへの対応も非常に早い。主にx86/x64アーキテクチャをサポートする。バージョン11.1まではIA-64 (Itanium) をサポートするが、バージョン12.0以降ではサポートされない。バージョン11.1においては、次世代256ビット命令であるIntel AVXや、米国標準暗号方式であるAES命令セットがサポートされた。バージョン12.1において、AVX2命令がサポートされた。

最適化性能の面では、特にSIMD命令を使用した自動ベクタライズ機能が優秀である。ただし、自動化といってもコンパイラが判断可能であるような限定的な状況でしか適用されず、アセンブラや組み込み関数を使って手動で慎重にベクタライズされたコードの実行速度にはかなわないことが多い。しかし、SIMD命令を扱えるプログラマは少ないため、一般的なプログラマがSIMD命令の恩恵を受けられるように、自動ベクタライズ機能の強化も続けられている。

他にもプロファイル計測用バイナリを出力し、実際に運用することによりコードの実行状況のデータを収集し、それを元に最適化するプロファイリング機能や、OpenMPによる自動マルチスレッド化にも対応している。バージョン11からは1パッケージで多言語対応となった。

実行に必要なライブラリやリンカなどは付属していないため、他のコンパイラの環境に寄生した形で実行される。WindowsではMicrosoft Visual Studioが、LinuxではGCCが必要である。基本的にはコンソールアプリケーションであるが Visual Studio 向けのプラグインが存在するため統合開発環境でも利用が可能である。
コンソールでの利用＝コマンドラインツールとしての利用のみであれば、無料版であるVisual C++ Express Editionがホスト環境として利用可能である。なお、Visual Studio 2010 Expressまでは、IA-32をターゲットとする場合は追加のSDKインストールは不要だが、Intel 64をターゲットとする場合は別途追加のx64開発用SDKをインストールする必要があった（Visual Studio Express 2012 for Windows Desktop以降は追加のインストールは不要になっている）。

30日無料の評価版があり、使用日期限以外の機能制限は存在しない。正規のライセンスを購入すればそのまま製品版として使用できる。ライセンスには1年間のアップデート入手の権利があり、ライセンス停止後に最新版をダウンロードしてきても使用できないが停止前にリリースされたバージョンはそのまま継続使用できる。ライセンスは更新することによってアップデート入手の権利を保持し続けることが可能である。なお、Linux版では非商用目的に限り無償で使用できるバージョンが公開されている。

その性能の高さから特に画像処理、映像、音声・音響関係で使用される場合が多い。

なお、開発環境としてのWindows VistaおよびWindows Server 2003のサポートはバージョン14.0で終了した。

## 言語規格サポート
### C言語
C99とC11の対応リストが公開されている。バージョン18.0でC11にほぼ対応している。

### C++
C++11、C++14、C++17の対応リストが公開されている。バージョン15.0でC++11にほぼ対応している。バージョン19.0において、C++14を完全サポートし、C++17の大部分をサポートしている。

なお、Visual C++コンパイラでサポートされているC++/CLIやおよびC++ AMPの機能は使用できない。また、Windowsストアアプリの開発にも使用できない。

### OpenMP
OpenMP規格はバージョン12.1においてOpenMP 3.1をサポートしている。また、バージョン14.0においてOpenMP 4.0の機能を一部サポートしている。バージョン19.0においてOpenMP 4.5およびOpenMP 5.0の一部をサポートしている。

そのほか、並列化のためのC/C++言語拡張としてCilk Plusをサポートしていたが、バージョン18.0で非推奨 (deprecated) となった。

## 付属のインテル製ライブラリ
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からはインテルの方針により、プロフェッショナル エディションのみの提供となっている。また、バージョン12以降の販売製品の名称はIntel C++ Compilerではなく、これらのライブラリを含めたスイート製品として**Intel C++ Composer XE**という名称が使われるようになっていたが、さらにIntel Parallel Studio（開発ツール類を含む総合スイート製品）のバージョン2015以降は、「Intel Parallel Studio XE Composer Edition for C++」以上の製品エディションにIntel C++ Compilerが含まれる形となった。

なお、これらの各ライブラリは単体製品での販売も行なわれている。Intel C++ Compilerを使用せず、Visual C++コンパイラなどとIPP/TBB/MKLを組み合わせて使用することも可能である。

## 注意点・問題点
バージョン8から実行開始時のCPUチェックでAMDのCPUを認識しないようになったため、AMDのCPUでは出力バイナリの実行性能が劣ってしまう場合がある。。この問題はCPUチェック処理を独自に記述し、リンク時に強制的に上書きすることで回避することが可能である。

またデフォルトの設定では高速化のため浮動小数点処理で自動的にSSEを使用するようになっている。そのためFPUを使用した場合とでは処理結果に差異が生ずる場合がある。精度重視の設定でコンパイルすることによりFPUを使用するコードを生成することが可能だが速度の方は遅くなってしまう。

コンパイルオプションでマルチCPU対応バイナリを出力することが可能だが、その分コードサイズが増大する傾向がある。

また、Intel C++ Compilerによって出力されたバイナリ（プログラム）の実行時に、Intel C++ Compiler独自のDLLや共有ライブラリが必要となる場合がある（明示的にOpenMPあるいはIPPライブラリを使用していなくても、特定の最適化オプションを有効にすることで、OpenMPあるいはIPPが暗黙的にリンクされる場合がある）。インテルからはランタイムライブラリ（libiomp5md.dllなどを含むパッケージ）が無償配布されているが、Microsoft Visual C++のランタイムとは違って一般のエンドユーザーには公開されておらず、開発者自らがアプリケーションに添付するなどして再配布することになる。しかし、これに留意せずランタイムの再配布や添付を行なわない開発者が多いため、エンドユーザーがプログラムを実行できない症例が多く報告されている。この点に関してはライブラリを静的リンクすることによりコードサイズは増大するがランタイムを必要としないコードを生成することが可能であるが、IPPなどにおいてSIMD拡張命令を使用した高速なバージョンの関数を使用するためには、プロセッサの対応状況を調べるための初期化関数（ippInit()関数）を別途呼び出す必要がある。また、スタティックライブラリ版のIntel OpenMPはIPP 7.0までの提供となっているため、以降のバージョンではOpenMPランタイムの動的リンクが必須となる。

## 脚注

### 注釈

### 出典

## 関連項目
* インテル
* Microsoft Visual C++
* Intel Parallel Studio
* OpenMP

## 外部リンク
* Intel
* XLsoft
* インテル C++ コンパイラー 10.1 Windows 版リリースノート