並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」
Parallel Inspectorによるメモリエラーとスレッド化エラーの検知
ダウンロード サンプルファイル(エラーあり) (3.2 KB)
ダウンロード サンプルファイル(修正例) (3.3 KB)
スレッド化エラーの検出
次はParallel Inspectorのスレッド化エラー解析機能を試してみます。
[ツール]-[メニュー]-[Parallel Inspector]-[Inspector Threading Errors]をクリックしてください。表示されるダイアログで、最後までつまみを下げてから[Run Analyze]ボタンをクリックします。

クリック後、解析処理が始まりますのでしばらくお待ちください。解析が終了したらスレッド化エラーのイベントログが表示されるので[Interpret Result]をクリックします。スレッド化エラーもメモリエラー解析結果と同じく詳細な情報が表示されます。

今回はOverview画面のProblem列に注目してください。このサンプルプログラムの問題点がData raceだと的確に指摘しています。
さらに問題のコードが読み込みと書き込みに分けて表示され、大変分かりやすくなっています。
これで、このサンプルプログラムが毎回違う結果を出す原因は、変数stockCount(在庫数)を2つのスレッドで読み書きしていることだと分かります。並列プログラミングでは同時に2つ以上のスレッドが1つのデータを操作すると結果が予測できません。それをParallel Inspectorは検出したのです。
これさえ分かれば問題を解決したのも同然です。この短いサンプルプログラムでは効果が分かりにくいかもしれませんが、実務では数十万行以上のC/C++コードでデバッグすることが十分にありえます。そんな大量のコードの中から問題部分を探すのは大変骨が折れる作業です。それを自動かつ正確に検出できるのですから大変便利なツールです。
まとめ
今回の記事では並列プログラミング時のデバッグ作業が大変であり、その作業を助けるツールが必須であることを解説しました。また、よいツールとしてParallel Inspectorがあることを示し、簡単なサンプルコードを解析して大変便利なツールであることを確認しました。
今回は駆け足で解説しましたので、まだまだParallel Inspectorの機能を紹介しきれていません。読者の方はぜひ実際に体験版を入手してお試しください。
- 修正履歴
-
- 2009/09/23 06:59 コメント欄にてのご指摘により不備が見つかりましたので、メモリエラーの修正に関する事柄を修正しました。
- 2009/09/14 20:28 コメント欄にて関数名が間違っているとのご指摘を受けましたのでProducerに訂正しました。
この記事は参考になりましたか?
既に会員の方はを行ってください。
- インテルソフトウェア開発製品による並列化プログラミング連載記事一覧
-
- マルチコア時代の定番チューニングツール 「インテルParallel Studio 2011...
- 正しい分析でムダなくチューニング アプリの並列化を支援する「インテル Parallel A...
- 並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」
- この記事の著者
-
インドリ(インドリ)
分析・設計・実装なんでもありのフリーエンジニア。ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。座右の銘は温故知新で、新旧関係なく必要だと考えたものは全て学...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社
この記事は参考になりましたか?
この記事をシェア


![[Overview]をクリックすると表示される、スレッド化エラーのOverview画面](http://cz-cdn.shoeisha.jp/static/images/article/4372/fig09_s.gif)