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

 インテル Parallel Studio 2011に新たに搭載されたツール「インテル Parallel Advisor」は、並列化したいプログラムを関数・命令レベルで分析し、並列化すべき個所を提案する分析ツールだ。本記事ではこのインテル Parallel Advisorを使用し、実際にプログラムの分析や並列化を行う例を紹介する。

並列化を支援する3つの機能を搭載、5つのステップでプログラムを並列化

 プログラムを並列化することで、近年多くのコンピュータに搭載されているマルチコアCPUでパフォーマンス向上が見込める。しかし、プログラムを効率的に並列化するには並列化に関する知識や経験が必要であり、むやみやたらな並列化はパフォーマンスを低下させることにもつながる。

 たとえば、プログラムを並列化する場合、時間ののかかる処理を複数のスレッドに分割して並列実行する、というのが一般的であるが、スレッドの生成のオーバーヘッドが並列化によるパフォーマンス向上を上回る場合、パフォーマンスが悪化してしまう。また、マルチスレッドプログラムでは複数のスレッドが同時に同じ変数にアクセスする可能性があり、適切な排他制御などを行わずに単純に並列化を行った場合、これによる不具合が発生することも多い。

 そのため、プログラムの並列化を行う際にはプログラムを綿密に分析して並列化すべき個所を判断したり、実際に並列化を行ったプログラムを実行して問題点を探す、といったトライ&エラーの作業が必要であった。Parallel Advisorは、このような面倒な手順を自動で行ってくれるツールである。

 Parallel Advisorの中核となっているのは、「Survey Analysis」と「Suitability Analysis」、「Correctness Analysis」という3つの機能である(表1)。

表1 Parallel Advisorの3つの機能
機能 説明
Survey Analysis プログラムを実行してパフォーマンスを調査し、時間のかかっている個所を見つけ出す
Suitability Analysis 指定した個所を並列化した場合、どの程度のパフォーマンス向上が見込めるかを分析する
Correctness Analysis 指定した個所を並列化した場合に発生するであろう問題を検出する

 Parallel Advisorでは、次のような5つのステップでこれらを実行するというワークフローが想定されている(図1)。これにしたがって作業を行うことで、効率良くプログラムの並列化が行える。

図1 Parallel Advisorのワークフロー
図1 Parallel Advisorのワークフロー

 Parallel Advisorのそれぞれの機能は簡単に利用できるが、「Annotate Source」や「Add Parallel Framework」のステップではユーザーが並列化すべき個所に手動でコードを埋め込む必要があるため、若干の知識やノウハウが必要だ。そこで以下ではParallel Advisorに付属するサンプルを使用してワークフローやParallel Advisorの機能や使い方を紹介していく。

Parallel Advisorのドキュメント

 Parallel Advisorのドキュメントは、Visual Studioヘルプの「Intel(R) Parallel Studio 2011」?「Intel(R) Parallel Advisor 2011」内にまとめられている(図2)。また、ツールバーの「Open the Intel Parallel Advisor 2011 Getting Started Tutorial」ボタンをクリックすると、WebブラウザでParallel Advisorの概要およびチュートリアルが記述された文章が開かれる。ただし、こちらには必要最小限の情報しか書かれていないので、詳しい情報を調べるには前述のヘルプをチェックする必要がある。

図2 Parallel Advisorのドキュメント
図2 Parallel Advisorのドキュメント

今回使用するサンプルコード

 Parallel Advisorをインストールすると、「C:\Program Files\Intel\Parallel Studio 2011\Advisor\samples\en」以下にサンプルコードがインストールされる(表2)。それぞれのサンプルコードはZIP形式で圧縮されており、コードのほかVisual Studioのソリューションファイルや簡単なドキュメントも付属している。

表2 Parallel Advisorに付属するサンプルコード
サンプルコード 説明
heart.zip 筋肉や神経、心臓の動きをシミュレートする
newton.zip 多数のボールの挙動を物理的にシミュレートする
primes.zip 素数を計算して求める
sudoku.zip 数独の問題と答えを生成する
tachyon_Advisor.zip レイトレーシングを用いて画像をレンダリングする

 今回はこのうち、数独の問題と答えを生成するプログラム「sudoku」をサンプルとして使用し、Parallel Advisorの機能や使い方を紹介する。