インテル コンパイラー 1000本ノックプロジェクト
インテル コンパイラーにはさまざまな最適化機能が備えられており、そのためインテル コンパイラーでコンパイルしたプログラムは高速に動作すると言われている。しかし、そのためだけにわざわざソースコードからコンパイルを行うのは面倒だ、という人も多いだろう。そこでSourceForge.JP Magazine編集部では、インテル コンパイラーでコンパイルされたソフトウェアをより多くの人に試してもらうため、「インテル コンパイラー 1000本ノックプロジェクト」と題し、インテル コンパイラーでコンパイルしたプログラムを公開することにした。
インテル コンパイラーには自動並列化や自動ベクトル化、プロシージャ間の最適化(Inter Procedural Optimization、IPO)など、高速に動作するバイナリコードを生成するための機構が備えられている。これによって、Visual C++やGCCなどでコンパイルしていたアプリケーションを、インテル コンパイラーを使用して再コンパイルするだけでパフォーマンスが向上する可能性がある。
しかし、ソフトウェアによっては特別な設定が必要だったり、ソースコードの修正が必要な場合もある。そこで、気軽にインテル コンパイラーで作成したプログラムを試せるように、また自分でコンパイルを行う際にその手順が具体的に分かるように、インテル コンパイラー 1000本ノックプロジェクトではインテル コンパイラーで作成したプログラムの配布や、コンパイル方法の解説を行っている。
本記事ではこのプロジェクトで扱っているいくつかのオープンソースソフトウェアについて、そのコンパイル手順を紹介するほか、パフォーマンスの調査も行っているので、ぜひ参考にしてほしい。
インテル コンパイラーでソフトウェアをコンパイルする
インテル コンパイラーはVisual C++やGCCといったコンパイラと高い互換性を備えている。たとえば、Windows版のインテル コンパイラーはVisual C++と、Linux/Mac OS X版はGCCとコンパイルオプションの互換性があり、Visual C++やGCC向けのコンパイルオプションをそのまま認識する。Windows版のインテル コンパイラーにはVisual Studioの統合開発環境(IDE)用プラグインも含まれており、Visual StudioのIDEを利用するプロジェクトであれば、非常に簡単にインテル コンパイラーで再コンパイルできる。また、コンパイルにmakeや専用ビルドスクリプトなどを使用しているソフトウェアの場合でも、多くの場合コンパイラとしてインテル コンパイラーを使用するよう設定するだけで問題なくコンパイルが可能だ。
とはいえ、いくつか注意が必要な点もある。インテル コンパイラーはVisual C++やGCCと互換性があるといえども、100%同一、というわけではない。Visual C++やGCCでしか利用できない機能や若干仕様が異なる部分もあるため、ソフトウェアによってはソースコードの修正等が必要になる場合がある。そこで、まずはインテル コンパイラーで既存のソフトウェアをコンパイルする際の注意点や、知っておくと役立つ事項を紹介しておこう。
インテル コンパイラーのVisual Studio IDEプラグイン
Windows向けのソフトウェアの場合、Visual StudioのIDEを使用してコンパイルを行うことが多いだろう。この場合、インテル コンパイラーに含まれるVisual Studio IDEプラグインを導入することで、簡単にインテル コンパイラーを使用するよう設定できる。
Visual Studio IDEプラグインをインストールすると、Visual StudioのIDEに図1のようなツールバーが追加されるほか、ソリューション エクスプローラ画面のショートカットメニューに「インテル(R) C++ コンパイラー・プロフェッショナル」という項目が追加される(図2)。インテル コンパイラーを使用したいプロジェクトをソリューション エクスプローラで選択し、ツールバーの「インテル(R) C++を使用」ボタンをクリックする、もしくはショートカットメニューの「インテル(R) C++ コンパイラー・プロフェッショナル」の「インテル(R) C++を使用」メニューを選択すると、ソリューション エクスプローラのプロジェクトアイコンが「C++」というものに変わり、インテル コンパイラーが使用されるようになる仕組みだ(図3)。
また、「ビルド・コンポーネントの選択」メニューでは、インテル コンパイラーに付属するインテル インテグレーテッド・パフォーマンス・プリミティブ(IPP)やインテル マス・カーネル・ライブラリー(MKL)、インテル スレッディング・ビルディング・ブロック(TBB)の使用の有無などについても設定できる(図4)。