並列化すべき個所を自動診断する新ツール「インテル Parallel Advisor」を使ってみよう 5ページ

プログラムの並列化に必要な作業を大幅に効率化できるParallel Advisor

 さて、以上ではParallel Advisorの機能をサンプルを用いて説明してきたが、このようにParallel Advisorでは5つのステップを順に行うことで、簡単に効率よくプログラムを並列化できる。今回使用したサンプルは非常にシンプルなプログラムであるため、特に困難なく作業が進んだが、実際のプログラムの場合も基本的な作業は同一である。しかし、大規模なプログラムの場合、今回の例のように簡単には並列化が行えない場合がある。

 たとえば次の図12は、とあるプログラムに対しSuitability Analysisを実行した結果のSuitability Reportだ。「Target CPU Number」が増えてもパフォーマンス向上率は1以下となっているのが分かる。

図12 そのまま並列化してもパフォーマンス向上が難しいプログラムの解析例
図12 そのまま並列化してもパフォーマンス向上が難しいプログラムの解析例

 このプログラムの場合、そのまま並列化を行ってもパフォーマンスは向上しない、ということが分かるのだが、Parallel Advisorではこのようなプログラムに対し、どのように修正を加えれば並列化の効果が見込めるのか、という情報も提示してくれる。注目して欲しいのが「Changes I will make to this site to improve performance」の部分だ。

 ここで「Reduce Task Overhead」が「+0.77x」というのは、タスク実行時のオーバーヘッドを小さくすれば0.77倍パフォーマンスが向上する可能性がある、ということを示している。また、「Enable Task Chunking」が「+0.95x」というのは、タスクを適切に分割することで0.95倍パフォーマンスが向上する可能性がある、ということになる。実際、コードにそのような修正を加えたところ、図13のように並列化により最大4倍までパフォーマンス向上が期待できる、という結果が得られた。

図13 コードを修正し、再度Suitabilit Analysisを実行した結果
図13 コードを修正し、再度Suitabilit Analysisを実行した結果

 このように、Parallel Advisorは複雑なプログラムに対しても十分に効果を発揮する並列化支援ツールである。使い方も容易であり、並列化の経験が浅い開発者からベテラン開発者まで、多くの開発者に有用なツールと言えるだろう。