HPC/並列プログラミングポータルでは、HPC(High Performance Computing)プログラミングや並列プログラミングに関する情報を集積・発信しています。 |
[記事一覧を見る]
インテル Composer XE 2011(以下、Composer XE)はコンパイラ「インテル C++ コンパイラー XE」と「インテル Fortran コンパイラー XE」、ライブラリ製品である「インテル MKL」、「インテル IPP」、「インテル TBB」をバンドルした製品だ。また、Windows版にはVisual Studio向けのデバッガ拡張「インテル Parallel Debugger Extension」が、Linux版にはGUIを備えた単体で動作するデバッガ「インテル デバッガー」が同梱されている(表4)。
カテゴリ | Windows版 | Linux版 | |
---|---|---|---|
C/C++コンパイラ | インテル C++ コンパイラー XE 12.0 | ||
Fortranコンパイラ | インテル Visual Fortran コンパイラー XE 12.0 | インテル Fortran コンパイラー XE 12.0 | |
ライブラリ | インテル MKL 10.3 | ||
インテル IPP 7.0 | |||
インテル TBB 3.0 | |||
デバッガ | インテル Parallel Debugger Extension | インテル デバッガー |
インテル C++ コンパイラー XEは、以前は「インテル C++ コンパイラー」という名称でリリースされていた製品だ。バージョン番号も「12.0」にアップデートされており、単体製品として販売されていたインテル C++ コンパイラーの全機能を継承した上で、新たな機能が追加されている。インテル C++ コンパイラーはParallel Studioにも同梱されているが、そちらは最適化機能など一部の機能が制限されていた。インテル C++ コンパイラー XEでは「フル機能の上位版」という位置付けが明確になったともいえる。
現在、Windows環境ではVisual Studio(Visual C++)が、Linux環境ではGCCが事実上の標準コンパイラとなっているが、インテル C++ コンパイラー XE 12.0はより強力な最適化機能を搭載しているのが特徴だ。不要な命令を削除したり、命令をより高速に実装できるように入れ替える、といった最適化機能は多くのコンパイラに搭載されているが、インテル C++ コンパイラー XE 12.0では複数レベルの最適化機能を備えており、より高いパフォーマンスが期待できる(表5)。さらに、ループなどに繰り返し実行される処理を解析し、可能であれば自動的に並列化を行う自動並列化機能も搭載している。科学分野やマルチメディア処理など、多くの演算を行うアプリケーションではこれらの効果は顕著であり、インテル C++ コンパイラーでコンパイルを行うだけで性能が向上した、という例も多く報告されている。
最適化機能 | 説明 |
---|---|
自動ベクトル化 | インテルCPUが備えるストリーミングSIMD拡張命令(SSE)を使用して演算処理を高速化する |
自動並列化 | 安全に並列実行できるループを検出し、マルチスレッドで並列実行するコードを自動生成する |
ハイパフォーマンス最適化機構(HPO) | ループを解析し、キャッシュアクセスやメモリアクセスの最適化、SSEの使用、並列化、高速化のためのループ構造変更といった総合的な最適化を行う |
プロシージャ間の最適化(IPO) | 高頻度で呼び出される関数についてリンク時にインライン化を行うことで呼び出しオーバーヘッドの削減による高速化を計る |
プロファイルに基づく最適化 | プログラムを実際に実行した際の挙動を記録したデータ(プロファイル)を用いてコードを最適化する |
データ・プリフェッチ | データを先読みしてキャッシュに格納しておくことで計算処理のパフォーマンスを向上させる |
また、互換性の高さもインテル C++ コンパイラー XEの特徴の1つだ。Windows版はVisual Studio(Visual C++)と、Linux版はGCCとそれぞれソースコード、バイナリだけでなく、機能およびコンパイラオプションにおいても高い互換性がある。Windows版のComposer XEについてはVisual Studio用プラグインも付属しており、Visual StudioのIDEからインテル C++ コンパイラー XEを利用したり、GUIでコンパイラ設定を変更できる(図2、3)。
これにより、Visual Studioで開発していたソースコードや、GCC向けのソースコードの多くは修正を加えることなしにインテル C++ コンパイラー XEでコンパイルできる。もちろん、Visual StudioやGCCで作成されたライブラリやバイナリをそのままインテル C++ コンパイラー XEで利用することも可能だ。
そのほか、C言語については「C90」と呼ばれるC言語の標準規格「ISO/IEC 9899:1990」に準拠するほか、「C99」(ISO/IEC 9899:1999)で規定されている仕様の大部分もサポートされている。C++言語についても「C++98」(ISO/IEC 14882:1998)に準拠するほか、現在策定が進んでいる新標準規格、通称「C++0x」の一部機能についてもサポートされている。
なお、Parallel Studioに含まれるインテル C++ コンパイラーとの相違点は次のようになる(表6)。
特徴 | インテル C++ コンパイラー | インテル C++ コンパイラーXE |
---|---|---|
Cilk Plus対応 | ○ | ○ |
C++0x対応 | ○ | ○ |
自動並列化機能 | ○ | ○ |
ガイド付き自動並列化 | ○ | ○ |
自動並列化を行う閾値の変更 | × | ○ |
SSE/AVXを利用する高度な最適化 | ○ | ○ |
プロファイルに基づく最適化 | × | ○ |
スタティック・セキュリティー解析機能※ | × | ○ |
※プログラム中のセキュリティ問題を検出する機能。インテル Parallel Studio XEもしくはインテル C++ Studio XE製品でサポートされ、分析結果はインテル Inspector XEで表示させる
インテル C++ コンパイラーでは従来から自動並列化やOpenMPのサポートなど、並列プログラミングを支援する機能を搭載していた。インテル C++ コンパイラー XEではこれらに加え、C/C++向けの並列プログラミング向け言語拡張「インテル Cilk Plus」(以下、Cilk Plus)やガイド付き自動並列化処理といった新機能が追加されている。
Cilk Plusは、C/C++に並列化をより容易に実装するためのキーワードや、新たな文法を追加するものだ。詳しくは別記事(インテル Parallel Composerの新機能——並列プログラムを容易に実装できる「インテル Cilk Plus」入門)にて紹介しているのでそちらを参照していただきたいが、インテルはCilk Plusと並列プログラミング向けのライブラリ「インテル TBB」および「インテル Array Building Blocks」の組み合わせを「インテル Parallel Building Blocks」(インテル PBB)と呼び、並列プログラム開発モデルの総合セットとしている。これにより、さまざまなケースに柔軟に対応でき、かつ高パフォーマンスなプログラムを作成できるとのことだ。
また、ガイド付き自動並列処理は自動並列化機能と組み合わせて利用できるもので、コンパイル時にソースコードを分析し、「ソースコードをこのように修正すればパフォーマンスが向上しますよ」というアドバイスを提示するものだ。ガイド付き自動並列処理では、次のようなアドバイスが提供される。
従来のインテル C++ コンパイラーでも自動並列化できない部分について依存性解析を行い、その結果をメッセージとして出力する機能を備えていたが、自動並列化できない個所については自動並列化ができない旨のみが表示され、どのように変更すればよいのか、という情報は提示されなかった。このガイド付き自動並列処理では具体的に変更すべき個所や内容を提示するため、ソースコードの修正がより容易となる。
Composer XEには前述のTBBに加え、「インテル MKL」や「インテル IPP」というライブラリ製品も同梱されている。MKLは行列演算関数や高速フーリエ変換(FFT)関数、統計関数などを含む数値演算ライブラリで、工学・科学・金融系などのアプリケーションでの利用が想定されている。また、IPPは画像や動画、音声といったマルチメディアコンテンツや信号処理、データ圧縮/伸張や暗号化、文字列処理など、一般的なアプリケーションで有用な処理を実装したライブラリである。MKLやIPPに含まれる関数はインテルの各種CPUに最適化されており、またマルチコア/マルチCPU環境でより高いパフォーマンスを発揮できるよう並列化も行われている。
なお、Composer XEにはC++コンパイラだけでなく、Fortranコンパイラも含まれている。こちらも最新のCPUサポートが行われているほか、旧バージョンやほかのFortranコンパイラとの互換性を保ちつつ機能拡張が行われている。科学技術分野などでFortranを必要とするユーザーにとっては大きな選択肢の1つといえるだろう。
[PageInfo]
LastUpdate: 2011-01-11 18:34:57, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members