Intel C++ Compiler

Intel C++ Compiler (ICC) の解説



Intel C++ Compiler(ICC)は、インテルが開発・販売しているCおよびC++言語用の高性能コンパイラです。日本国内では、XLsoftが販売とサポートを行っています。ICC、またはICL(Linux/macOSおよびWindows用コンパイラの実行プログラム名に由来)という略称で知られています。

概要



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

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

ICCは、プロファイル計測用バイナリを出力し、実際の運用データに基づいて最適化を行うプロファイリング機能や、OpenMPによる自動マルチスレッド化にも対応しています。バージョン11からは、1つのパッケージで多言語に対応しました。

実行に必要なライブラリやリンカは付属していないため、他のコンパイラの環境に依存する形で実行されます。WindowsではMicrosoft Visual StudioLinuxでは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版には、非商用目的に限り無償で使用できるバージョンが公開されています。

ICCはその高い性能から、特に画像処理、映像、音声・音響関係の分野で広く利用されています。

開発環境としての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++/CX、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で非推奨となりました。

付属のインテルライブラリ



Intel C++ Compiler 11.1 プロフェッショナル エディションには、以下のインテル純正の高性能ライブラリが付属します。

Intel Integrated Performance Primitives (IPP): 画像処理・信号処理・動画処理などに最適化されたマルチメディアライブラリ
Intel Threading Building Blocks (TBB): スレッドセーフ化されたコンテナや同期クラスを含む並列化用C++テンプレートライブラリ
* Intel Math Kernel Library (MKL): BLAS、LAPACK、FFTなどの高度な演算処理用に最適化された数学ライブラリ

バージョン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での実行性能が低下する場合があります。この問題を回避するために、古いバージョン7を使用し続ける開発者もいます。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ランタイムの動的リンクが必須となります。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。