HPC/並列プログラミングポータル

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

新着トピックス

パフォーマンス解析ツール「VTune」でアプリケーションを高速化

 作成したプログラムのパフォーマンスに問題がある場合、性能解析ツールを利用して問題点を分析するのが一般的だ。性能解析ツールには様々なものがあるが、その中でも高機能なものとしてインテルが開発する性能解析ツール「インテル VTune パフォーマンス・アナライザー」がある。

 本記事ではパフォーマンスの問題が発見されたプログラムを対象に、このインテル VTune パフォーマンス・アナライザーを使用して問題点の調査とパフォーマンスの改善を行う例を紹介する。

パフォーマンスが低下する原因を特定するツール「プロファイラ」

 作成したプログラムの性能解析を行うツールとして、たとえばVisual Studioには「Visual Studio プロファイラ」というプロファイラが搭載されているほか、GCCではgprofというツールを利用できる。このようなプロファイラを利用することで、プログラム中のどの関数が何回呼ばれているのか、またその関数の実行時間はどれくらいか、といった統計情報を収集することが可能だ。

 インテルの「インテル VTune パフォーマンス・アナライザー」(以下、VTune)は、このようなプロファイラ製品の1つである(図1)。プロファイラ製品は先に挙げたVisual Studio プロファイラやgrpof以外にもさまざまなものがあるが、VTuneが他の製品と一線を画すのは、パフォーマンスを解析したいプログラムだけでなく、プログラム実行時のシステム全体の状況をサンプリングできる、という点だろう。

 インテルの製品紹介ページで公開されている「Advantages Of VTune Performance Analyzer Over Other Profilers」(PDF)と題した資料によると、VTuneは次のような特徴を備えている。

・オーバーヘッドが小さい

 VTuneは非常に低い負荷でアプリケーションの挙動をサンプリングできるため、サンプリングによる対象プログラムの動作への影響が少ない。そのため、プロファイラを実行していない通常の動作に近い挙動を測定できる。

・システム全体を分析できる

 マルチタスクOSの上では、アプリケーションは単独で動作しているわけではない。そのため、そのパフォーマンスは常にOSやドライバ、ほかのアプリケーションなどの影響を受けて変動することになる。VTuneはCPU上で実行されるすべての命令についてサンプリングを行うため、アプリケーション実行時のOSやそのほかのアプリケーションの挙動までも含めた分析を行える。

・ソースコードが不要

 VTuneで解析したいアプリケーションのソースコードがなくとも、プロファイリングが行える。たとえばVTuneには、プログラム中のどのような関数がどのように呼び出されたかを解析する「Call Graph」という機能があるが、ソースコードが無くてもどのような関数が呼び出されているのかを解析することが可能だ。もちろん、ソースコードがあればより詳細な情報を表示できる。

・コードの修正なしにサンプリングが可能

 たとえばGCCの場合、gprofでサンプリングを行う場合は「-pg」オプションを付けてコンパイルを行う必要があるが、VTuneではこのような特別なコンパイルオプションやライブラリへのリンク、ソースコードの修正などは不要だ。VTuneではデバッグ情報さえあればパフォーマンスのサンプリングが行える。

 さらに、ソースコードとデバッグ情報の両方が利用できる環境の場合、CPUが備える動作統計情報取得機能を利用してソースコード中のどの部分でどのような問題が起きているのかを検出しチューニングの指標を示す機能など、より高度な機能をより効果的に使用できる。

ImageMagickのパフォーマンス低下の原因はどこ?

 「インテル コンパイラーでオープンソースソフトウェアをコンパイルしよう」記事では、画像のバッチ処理ツール「ImageMagick」をインテル コンパイラーでコンパイルし、その性能を評価している。そこで興味深かったのが、インテル コンパイラーでコンパイルした場合に特定機能のパフォーマンスが低下する点だ。

 詳細については先の記事を参照してほしいが、ImageMagickに含まれる「convert」コマンドで画像にblur(ぼかし)操作を行った場合に実行速度が低下するという問題が発見できた。そこで、この問題の原因はどこにあるのか、VTuneを使って調査してみよう。