高度な最適化機能や並列プログラミングサポートを提供する新開発ツール「インテル Parallel Studio XE 2011」 3ページ
簡単な操作でパフォーマンス上の問題点を検出できる「インテル 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)。