発見しづらいバグや問題点も検出できる並列化に特化した開発ツールセット |
プログラムの並列化は、かつては多岐にわたるノウハウが必要な「職人芸」であった。しかし、現在では並列化の経験の少ない開発者でも効率的にプログラムを並列化できる並列化支援ツールが登場している。「インテル Parallel Studio」は、自動並列化機能を備えたコンパイラ、並列化に潜むバグを検出するデバッガ、パフォーマンスのボトルネックとなる個所を特定するプロファイラなどから構成される開発ツールセットだ。
注目される「並列化」と、並列化特有の問題 |
ソフトウェアを高速化するテクニックとして、複数のCPUコアを用いて目的の処理を並列実行する「並列化」と呼ばれる手法が注目を浴びている。最近ではマルチコアCPUが普及しており、その能力を100パーセント引き出すには並列化が必須であるからだ。
しかし、プログラムの並列化は多くの開発者にとって困難な問題である。並列化を行う場合、OSやライブラリなどのマルチスレッド機構を用い、対象の処理を分割して複数のスレッドで同時に実行する、というのが一般的だ。このようなマルチスレッド機構を利用する場合、注意しなければならないのがデータの競合(依存関係にあるデータを、タイミングを考慮せずに処理してしまう状態など)やデッドロック(同時に複数のスレッドが処理終了待ち状態に入り、処理全体が停止してしまうこと)である。しかし、これらはプログラムの実行時に必ず再現されるというものではないため、デバッグが難しい。さらにデータの競合は必ずしもプログラムのクラッシュを引き起こすというわけではないため問題の発生に気付きにくく、原因となる個所を見つけ出すのも容易ではない。
並列化を容易かつ効率的に―― 「インテル Parallel Studio」 |
以上のように並列化には一般的なプログラミングとは異なるノウハウが必要となるため、並列化を求められてもどう手を付ければ良いのか困惑する開発者も多いだろう。このような状況を踏まえ、開発者がアプリケーションの並列化をできるだけ容易かつ効率的に行えるようにとリリースされた開発ツールがインテルの「インテル Parallel Studio」だ。
インテル Parallel Studioは、並列化対応のコンパイラおよびデバッガ、ライブラリを含む「インテル Parallel Composer」と、デバッグツール「インテル Parallel Inspector」、パフォーマンス解析ツール「インテル Parallel Amplifier」という3つのコンポーネントから構成されるWindows向け開発スイートだ。これらは並列アプリケーションの設計、実装、デバッグ、チューニングの各ステップに対応するものとなる。
まずインテル Parallel Composerだが、これは並列化対応のコンパイラ「インテル C++ コンパイラー」およびデバッガ「インテル Parallel Debugger Extension」、そして並列化対応ライブラリ「インテル スレッディング・ビルディング・ブロック」および「インテル インテグレーテッド・パフォーマンス・プリミティブ」を含む、並列化されたアプリケーションを開発/コンパイルするためのツールセットとなる。
インテル C++ コンパイラーは、OpenMP 3.0やラムダ関数サポートなど並列処理の実装を支援する機能や、プログラム中のループを自動的に並列化する機能「自動並列化」など、充実した並列化/最適化機能を備えている。また、インテル Parallel Debugger Extensionは並列化されたプログラム向けの機能を備えたデバッガで、動的に並列処理を無効化する「シリアル実行」機能や、複数のスレッド間で共有しているメモリ領域へのアクセスを検知する機能などを搭載している。
データ競合などの並列化問題を検出 |
インテル Parallel Inspectorは並列化/マルチスレッド化されたプログラムにおいての問題点を検出するためのデバッグツールである。並列化ではデータ競合やデッドロックが問題になりやすい、ということは先にも述べたが、Parallel Inspectorを利用することでこれらを簡単に検出できる。コード内のどこでどのような問題が発生しているのかを診断するメッセージも表示され、問題を迅速に把握できるのが特徴だ(画面1)。また、メモリの解放し忘れや初期化していないメモリ領域への書き込みといったメモリ関連の問題についても検出できる。
画面1 インテル Parallel Inspectorでのエラー検出例。「primes.cpp」の49行目、「PrimeCount++;」という個所でデータ競合が発生していることが分かる。 |
並列アプリケーションのパフォーマンス解析
|
そしてインテル Parallel Amplifierであるが、こちらは並列アプリケーション向けに設計されたパフォーマンス解析ツールとなる(画面2)。プログラム内で処理に時間がかかっている場所を簡単に検出できるだけでなく、その場所ごとにCPUの利用状況を確認できるのが特徴だ。並列化を行ってもパフォーマンスが向上しない原因の1つとして、スレッド間の同期や排他処理が原因でCPUを効率的に利用できていない、という場合がある。こうしたパフォーマンスに関する問題も、インテル Parallel Amplifierを利用すれば検出しやすい。
画面2 インテル Parallel Amplifierでは、CPUを効率的に利用できていない個所を検出し、そのCPU利用状況とともに表示できる。 |
なお、現在はまだ正式にはリリースされていないが、今後これらに加えて新たに「インテル Parallel Advisor」と呼ばれるツールも追加される予定である。これは並列化されていないプログラムに対し、どこをどのように並列化すれば良いのかなどのアドバイスを提示するツールとなり、インテル Parallel Studioの既存ユーザーには無償で提供されるとのことだ。
並列化に関するドキュメントも公開中 |
アプリケーションの並列化においては実装面だけでなく、デバッグやパフォーマンスチューニングにおいても通常のアプリケーション開発とは異なる難しさがあり、従来は経験を積んだ開発者のノウハウに頼らざるを得ないこともあった。しかし、ここまで見てきたように、インテル Parallel Studioを利用することで並列化に関する経験が少ない開発者でも比較的容易にアプリケーションを並列化することが可能となることがお分かりいただけただろう。もちろん、並列化について十分な知識・経験のある開発者にとっても、インテル Parallel Studioは設計から実装、デバッグ、チューニングという開発サイクル全般において強力な支援ツールとなるはずだ。
インテル Parallel Studioは、すべての機能が30日間、無償で利用できる評価版が用意されているので、まずは試してみていただきたい。
また、並列化の基本的な考え方やその実装方法、よりパフォーマンスの高いアプリケーションを作成するためのノウハウなどをまとめたドキュメントとして「マルチスレッド・アプリケーション開発のためのインテル・ガイド」や、小冊子、「THE PARALLEL UNIVERSE」(Issue 1、Issue 2)も公開されている。これから並列化に取り組もうという方、あるいはより深く学びたいという開発者にとっては非常に有用な資料となるだろう。
ダウンロード
提供:エクセルソフト株式会社
アイティメディア 営業企画
制作:@IT 編集部
掲載内容有効期限:2010年07月31日
「並列処理対応の強い味方」 INDEX |
|
【PART 1】 自動並列化でマルチコアの性能を引き出す 並列処理に強い開発ツール 「インテル コンパイラー」 |
|
【PART 2】 発見しづらいバグや問題点も検出できる 並列化に特化した開発ツールセット 「インテル Parallel Studio」 |
ダウンロード
関連リンク
関連資料
マルチスレッド・アプリケーション開発のためのインテル・ガイド
並列化について学べる小冊子「THE PARALLEL UNIVERSE」
関連記事
インテル C++/Fortranコンパイラ9.0、マルチコア対応強化 (@IT News)
ItaniumRプロセッサーの性能を最大限に引き出すアプリケーションの最適化とは (@IT Special PR)