HPC/並列プログラミングポータルでは、HPC(High Performance Computing)プログラミングや並列プログラミングに関する情報を集積・発信しています。

新着トピックス

高度な最適化機能や並列プログラミングサポートを提供する新開発ツール「インテル Parallel Studio XE 2011」

 インテルが開発ツール製品ラインを一新、より高いパフォーマンスを求める開発者に向けた開発ツール「インテル Parallel Studio XE 2011」をリリースした。コンパイラやデバッガ、プロファイラを含む総合開発パッケージであり、WindowsおよびLinux版が用意されている。

インテル Parallel Studio XE 2011とは?

 2010年11月10日、「インテル Parallel Studio XE 2011」(以下、Parallel Studio XE)がリリースされた。Parallel Studio XEはコンパイラやデバッガ、各種ライブラリ、パフォーマンス解析ツール、エラー検証ツールなどを含むWindowsおよびLinux向けのソフトウェア開発ツールであり、表1の製品が含まれている。

表1 Parallel Studio XE 2011に含まれる製品
製品名説明
インテル Composer XE 2011インテル C++ コンパイラー XEC/C++コンパイラ
インテル Visual Fortran コンパイラー XE(Windows版)/インテル Fortran コンパイラー XE(Linux版)Fortranコンパイラ
インテル MKL工学/科学/金融系アプリケーション向け算術ライブラリ
インテル IPPマルチメディア/データ処理/通信アプリケーション向けライブラリ
インテル TBB並列アプリケーション作成支援C++ライブラリ
インテル VTune Amplifier XE 2011パフォーマンス解析ツール(プロファイラ)
インテル Inspector XE 2011メモリ/スレッドエラー検証ツール

 従来、インテルのLinux/Windows向け開発製品としてはコンパイラ「インテル コンパイラー」やパフォーマンスチューニングツール「インテル VTune パフォーマンス・アナライザー」、マルチスレッドアプリケーション向けのエラー検証ツールスレッド「インテル スレッド・チェッカー」といったラインアップが用意されていた。Parallel Studio XEはこれらの製品の後継となるとともに、先にリリースされているインテルのWindows向け開発ツール「インテル Parallel Studio 2011」(以下、Parallel Studio)の上位版という位置付けとなっている。

 Parallel StudioはWindows版のみのリリースだったが、Parallel Studio XEはWindows版とLinux版の両方が用意されている。Parallel Studio XEに含まれる「インテル C++ コンパイラー XE 12.0」や「インテル Inspector XE 2011」、「インテル VTune Amplifier XE 2011」とParallel Studioに含まれるインテル C++ コンパイラーやParallel Inspector、Parallel Amplifierの機能の違いについては後述するが、Parallel Studio XEに含まれる製品のほうがより高度な機能を備えた上位版、という位置付けになっている(表2)。

表2 Parallel StudioとParallel Studio XEの機能比較
カテゴリ提供されるツール/機能インテル Parallel Studio 2011インテル Parallel Studio XE 2011
コンパイラ/ライブラリ(Composer)インテル C++ コンパイラー-
インテル C++ コンパイラー XE-
インテル Visual Fortran コンパイラー XE(Windows版)/インテル Fortran コンパイラー XE(Linux版)-
インテル Parallel Debugger Extension
インテル Parallel Building Blocks
インテル IPP
インテル MKL-
メモリー/スレッド解析(Inspector)インテル Parallel Inspector -
インテル Inspector XE 2011-
プロファイリング(Amplifier)インテル Parallel Amplifier -
インテル VTune Amplifier XE 2011-
設計支援(Advisor)インテル Parallel Advisor-

 なお、従来の製品とParallel Studio XE製品の対応は図1のとおりだ。

 また、Parallel Studio XE 2011のシステム要件については、表3のようになっている。

表3 Parallel Studio XE 2011のシステム最小要件
構成要素最小要件
Windows版Linux版
CPUSSE2対応のインテル製IA-32およびIntel 64対応プロセッサ
メモリ2GB1GB
HDD4GBの空き領域
OSWindows XP/Vista/7/Server 2003/Server 2008(32ビット版および64ビット版)Red Hat Enterprise Linux 4(Update 8)/5(Updates 4、5)/6、SUSE Linux Enterprise Server 10/11、Fedora 12/13
その他Visual Studio 2005/2008/2010(2005/2008の場合はStandard Edition以上が必要)。Windows SDK を利用する場合はコマンドラインツールのみ使用可。なお、Fortran を使用する場合はVisual Studio 2008 Shell も利用可能。gcc、g++および関連ツール

並列プログラミングサポートや最適化機能が強化されたインテル Composer XE 2011

 インテル Composer XE 2011(以下、Composer XE)はコンパイラ「インテル C++ コンパイラー XE」と「インテル Fortran コンパイラー XE」、ライブラリ製品である「インテル MKL」、「インテル IPP」、「インテル TBB」をバンドルした製品だ。また、Windows版にはVisual Studio向けのデバッガ拡張「インテル Parallel Debugger Extension」が、Linux版にはGUIを備えた単体で動作するデバッガ「インテル デバッガー」が同梱されている(表4)。

表4 インテル Composer XEに含まれる製品群
カテゴリ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インテル デバッガー

Visual StudioやGCCと互換性を持つインテル C++ コンパイラー XE

 インテル 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++ コンパイラーでコンパイルを行うだけで性能が向上した、という例も多く報告されている。

表5 インテル C++ コンパイラー XEが備える最適化機能
最適化機能説明
自動ベクトル化インテル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)。

表6 インテル C++ コンパイラーとインテル C++ コンパイラーXEとの相違点
特徴インテル 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つといえるだろう。

簡単な操作でパフォーマンス上の問題点を検出できる「インテル VTune Amplifier XE 2011」

 作成したプログラムをより高速化したい場合、まずは「プロファイラ」などと呼ばれる、パフォーマンス計測ツールを用いてプログラムの動作を調査しつつコードを修正していくことが一般的だ。最近のコンパイラやCPUは複雑な最適化を行っているため、高速化の可否をコードだけから判断するのは困難である。そのため、パフォーマンスチューニングでは高速化の余地がある個所を適切に見つけ出し、ピンポイントで修正を行うことが求められる。

 インテル VTune Amplifier XE 2011(以下、VTune Amplifier XE)は、このような作業に向けた性能解析ツールである。前バージョンである「インテル VTune パフォーマンス・アナライザー」は多機能なプロファイラとして定評があったが、VTune Amplifier XEではVisual Studioとの統合機能やUIの改善などが加えられ、より使いやすくなっているのが特徴だ。

目的に応じたデータを容易に収集

 VTune Amplifier XEは、一定間隔でプログラムの実行状況を記録するサンプリングベースのプロファイリング機能(「User-mode Sampling and Tracing Analysis」と呼ばれる)と、特定のCPUイベントをキャッチして情報を記録するイベントベースのプロファイリング機能(「Hardware Event-based Sampling Analysis」と呼ばれている)を備えている。サンプリングベースのプロファイリングではスタックの状態や各種APIの実行状況などが記録され、時間がかかっている処理の特定やスレッドのロック状況、プログラムの並列度などを測定可能だ。また、イベントベースのプロファイリングではメモリのアクセス状況やメモリ帯域幅に起因するパフォーマンス低下などを検出できる。

 VTune Amplifier XEで収集できる情報は多岐にわたるが、あらかじめ用途に応じたプリセットが用意されており、またGUIで利用できる設定ツールが用意されているため、その利用は非常に簡単だ。たとえばプログラム中で時間がかかっている処理を見つけ出すには、「Hotspots」プリセットを利用すれば良い(図5)。

 実行結果はグラフィカルに表示され、ソースコードやアセンブラコードと並べて計測結果を表示することもできる。これらにより、一目で問題となる個所を特定できるようになっている。

 また、マルチスレッド化されたプログラムの解析にも有用だ。たとえば「Concurrency」ではプログラムの並列度を測定でき、「Locks and Waits」ではロックなどの排他制御によるパフォーマンス低下などを検出できる(図7)。

 プリセットを利用せずに自分で取得する情報を設定することも可能だ(図8、9)。CPUやハードウェアに関する知識が必要だが、これによりCPUのキャッシュやメモリアクセスまでも考慮した高度なパフォーマンスチューニングにも対応できる。

Windows版はVisual Studioとの統合機能を搭載、スタンドアロンでも利用可能

 Windows版のVTune Amplifier XEでは、新たにVisual Studioとの統合機能も追加されている。前バージョンであるインテル VTune パフォーマンス・アナライザーはスタンドアロンのアプリケーションという形で提供されており、Visual Studioでプログラムをコンパイルした後、別途インテル VTune パフォーマンス・アナライザーを立ち上げ、実行するプログラムや引数といった各種設定を行う必要があった。一方VTune Amplifier XEでは、Visual StudioのIDEに追加される「Intel VTune Amplifier XE 2011」ツールバーから1クリックでプロファイリングの実行を行える(図10)。設定などのユーザーインターフェイスも一新されより分かりやすくなったほか、たとえばプロファイル結果をダブルクリックすると該当する個所のソースコードがVisual Studioのコードエディタで表示されるなど、シームレスに操作できるようになっている。

 なお、従来と同じくスタンドアロンのアプリケーションとしても利用することも可能だ(図11)。コマンドラインベースでサンプリングなどの操作を実行できるツールも付属しており、Visual StudioのIDEを使わずにVTune Amplifier XEを利用することも可能となっている。

 なお、Linux版についてはスタンドアロンのGUIツールと、コマンドラインベースのツールのみとなる。これらの操作やコマンドラインオプションはWindows版/Linux版で共通なので、クロスプラットフォームのアプリケーションを開発する場合でも難なく利用できるだろう(図12)。

メモリリークやマルチスレッドアプリケーション特有の問題を検出する「インテル Inspector XE 2011」

 マルチスレッドによる並列化では、メモリ内のデータに複数のスレッドから同時にアクセスするのが一般的だ。このようなプログラムの場合、メモリアクセスを適切に制御しないとデータの不整合(競合)が発生する可能性がある。また、メモリアクセスやI/Oなどのタイミングを調整するにはロックなどの排他処理機構を用いるのが一般的だが、ロックのタイミングや設計が不適切な場合、プログラムが停止してしまうこともある(デッドロックと呼ばれる)。

 このような問題は必ず発生するというものではなく、プログラムの実行タイミングによっては発生しない場合もあるため、問題の検出やデバッグが難しい。このような問題を検出するためのツールが、インテル Inspector XE 2011(以下、Inspector XE)である(図13)。

 Inspector XEは、対象となるアプリケーションの動作を監視し、メモリアクセスやスレッドの実行順などを記録して問題を検出するツールだ。以前は「インテル スレッド・チェッカー」という名称で提供されていたが、このたび名前が変更され、Parallel Studio XEに含まれる一製品となった。Inspector XEでは基本的なスレッド/メモリエラー検出機能はそのままに、ユーザーインターフェイスの刷新やVisual Studioとの統合など、より使いやすくなるよう改良が加えられている。

すぐに利用できるプリセット、目的に応じた調査対象のカスタマイズも可能

 Inspector XEでは、メモリエラー検出用のプリセット3種類(「Detect Leaks」および「Detect Memory Problems」、「Locate Memory Problems」)と、スレッドエラー検出用のプリセット3種類(「Detect Deadlocks」および「Detect Deadlocks and Data Races」、「Detect Deadlocks and Data Races」)、合計6種類の設定があらかじめ用意されている(図14)。

 たとえばメモリエラー検出用のプリセットでは、メモリリークやデータの意図しない書き換え、メモリ関連APIの不適切な利用などを検出できる。また、スレッドエラー検出用のプリセットではデータの競合やデッドロック、スレッド間の不適切なメモリアクセスなどを検出可能だ。

 検出された問題はその発生個所とともに一覧表示され、また個々の問題を選択することでソースコード中の該当個所を一目でチェックできるようになっている。たとえばメモリ関連の問題の場合、ソースコード中の複数個所が問題の原因となっていることが多いが、問題個所を同時に表示することでより原因を確認しやすくなっている(図15、16)。

 また、プリセットの設定では十分な情報を取得できない、また特定の問題だけを検出したい、といった場合に向け、用途に応じて調査対象を細かくカスタマイズすることも可能だ。これらの適切な設定にはメモリ管理やスレッド管理、プログラムのスタック管理方法などについて非常に高度な知識が必要ではあるが、使いこなせればプログラムのデバッグのための強力なツールとなるだろう(図17、18)。

Windows版はVisual Studioとの統合が可能、コマンドラインでの操作も可能

 VTune Amplifier XEと同様、Inspector XEについてもWindows版はVisual Studioとの統合機能が用意され、Visual StudioからInspector XEを呼び出し、開いているプロジェクトを簡単に分析できるようになった(図19)。

 また、従来のインテル スレッド・チェッカーと同様、単体でInspector XEを実行することも可能なほか、Windows版/Linux版ともにコマンドラインでエラー検出を実行できるツールも付属している(図20)。

使いやすさはそのままにParallel Studioよりも高度な機能を提供、Windows/Linuxのクロスプラットフォーム開発にも有用

 Parallel Studio XEに含まれる製品は基本的にParallel Studioに含まれる製品の上位版という位置付けになっている。今まではParallel Studioとインテル コンパイラー、インテル VTune パフォーマンス・アナライザー、インテル スレッド・チェッカーという別ブランドで販売されていたため分かりにくかったが、今回の製品名変更でそれぞれの位置付けが明確になった形だ。ただし、Parallel Studio XEにはParallel Studioに含まれている並列化に適している個所や並列化による問題点を検出するツール「Parallel Advisor」に対応する製品は含まれていない。

 Parallel Advisorで提供されている機能はインテル VTune Amplifier XE 2011やインテル Inspector XE 2011でも実現できるものの、インテル VTune Amplifier XE 2011やインテル Inspector XE 2011は設定項目が多い分、設定や作業に手間がかかってしまうことがある。Windows環境で基本的な並列化機能のみを利用したい、またParallel Advisorを利用したい、という場合はParallel Studioを、Windows環境でより高度な機能を利用したい、Linux環境で利用したい、という場合はParallel Studio XEと、環境と目的に応じて製品を選択すると良いだろう。

 なお、Parallel Studio XEには30日間すべての機能を無償で利用できる評価版が用意されている。評価版は国内代理店であるエクセルソフトのWebサイトからダウンロード可能だ。各種チュートリアルやサンプルコードなども同梱されているので、興味のある方はぜひダウンロードして試してほしい。