ソース表示: 並列化支援ツール「Parallel_Advisor」やC_C__言語拡張「Cilk」が追加、並列アプリケーション開発ツール「Parallel_Studio_2011」の新機能_p2 #63557

==== 並列化すべき個所やその方法をソースコードから診断、新ツール「Parallel Advisor」 ====

 Parallel Studio 2010ではさまざまな新機能が追加されているが、その中でも「目玉」と言えるのが、新たに追加されたツール「Parallel Advisor」である('''図1''')。

[[Thumb(run11.png, caption=図1 ガイドに従って操作することで効率良く並列化が行える「Parallel Advisor」)]]

 Parallel Advisorはパフォーマンス面で問題となっている個所を特定し、その部分の並列化によってどの程度のパフォーマンス向上が期待できるか、また並列化によってどのような問題が発生するかを診断するツールだ。作業手順は次の5つのステップに分かれており、指示に従って操作することでプログラムを効率良く並列化できる。

 *  Survey Target(プログラムを実行して処理に時間がかかっている個所を特定する)
 *  Annotate Sources(1.の結果を元にして、ソースコード中で並列化を行う候補となる個所にマクロを埋め込む)
 *  Check Suitability(マクロを埋め込んだ個所を並列化するとどの程度パフォーマンスが向上するかを予測する)
 *  Check Correctness(マクロを埋め込んだ個所を並列化した際に発生する問題を調査する)
 *  Add Parallel	Framework(埋め込んだマクロを並列プログラミングフレームワークのコードに置き換える)

 1.の「Survey Target」ではまず対象のプログラムが実行され、関数やステートメントごとにその実行時間の測定結果が表示される('''図2''')。ここで時間がかかっている処理やループを見つけ、並列化の候補とする。

[[Thumb(run3.png, caption=図2 「Survey Target」の実行結果。関数ごとに処理時間が表示される)]]

 続いて2.の「Annotate Source」で、並列化の候補となる個所にマクロを埋め込む作業を行う。このステップは基本的には手動での作業となるのだが、たとえばループの前後には「ANNOTATE_SITE_BEGIN」「ANNOTATE_SITE_END」を、ループ内で実行される処理の前後には「ANNOTATE_TASK_BEGIN」「ANNOTATE_TASK_END」を埋め込む、といったように基本的なルールは決まっているため、ルールを把握してしまえば作業自体は容易だ。また、「Annotation Wizard」などの支援ツールも用意されている('''図3''')。

[[Thumb(run6.png, caption=図3 「Annotation Wizard」などを使って、並列化の候補となる個所にマクロを埋め込んでいく)]]

 マクロを埋め込んだ後にソースコードを再コンパイルして3.の「Check Suitability」を実行すると、マクロで指定した個所それぞれについて「その部分を並列化するとどの程度のパフォーマンス向上が見られるか」を確認できるようになる('''図4''')。これにより、並列化でパフォーマンスが向上する個所とそうでない個所を簡単に判別できるというわけだ。

[[Thumb(run8.png, caption=図4 「Check Suitability」では並列化の効果を確認できる)]]

 また、4.の「Check Correctness」では、マクロで指定した個所を並列化した場合に発生しうる問題を検出できる。複数スレッドから同時にメモリにアクセスすることで発生する問題や、複数スレッドで共有すべきでないメモリを共有することで発生する問題など、検出された問題がその具体的な原因や発生個所とともに表示される('''図5''')。

[[Thumb(run9.png, caption=図5 「Check Correctness」では、並列化によって発生するメモリ関連のエラーを事前に検出できる)]]

 あとは3.で得られた結果を元に並列化する個所を決定して並列化のためのコードを入力し、また4.で得られた結果を元に発生しうるメモリ関連の問題を解決すべく修正を加えることで、プログラムの並列化が完了する(5.のAdd Parallel Framework)。ドキュメントにはパターンに応じたコードの実装例が示されており、基本的にはこれらに従ってコードを入力すれば作業が完了するようになっている。

 このようにParallel Advisorは一部手作業が必要ではあるものの、並列化に不慣れなユーザーでも指示に従って作業するだけで並列化を実現できるという、非常に強力なツールとなっている。

 なお、Parallel Advisorについては本連載3回目でその使い方や詳細を紹介する予定だ。