Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」

Parallel Inspectorによるメモリエラーとスレッド化エラーの検知

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/09/10 19:20
目次

スレッド化エラーの検出

 次はParallel Inspectorのスレッド化エラー解析機能を試してみます。

 [ツール]-[メニュー]-[Parallel Inspector]-[Inspector Threading Errors]をクリックしてください。表示されるダイアログで、最後までつまみを下げてから[Run Analyze]ボタンをクリックします。

つまみを一番下まで下げ、すべてのスレッド化エラーを検出
つまみを一番下まで下げ、すべてのスレッド化エラーを検出

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

スレッド化エラーのイベントログ
スレッド化エラーのイベントログ
スレッド化エラーの詳細画面
スレッド化エラーの詳細画面

 今回はOverview画面のProblem列に注目してください。このサンプルプログラムの問題点がData raceだと的確に指摘しています。

[Overview]をクリックすると表示される、スレッド化エラーのOverview画面
[Overview]をクリックすると表示される、スレッド化エラーのOverview画面

 さらに問題のコードが読み込みと書き込みに分けて表示され、大変分かりやすくなっています。

 これで、このサンプルプログラムが毎回違う結果を出す原因は、変数stockCount(在庫数)を2つのスレッドで読み書きしていることだと分かります。並列プログラミングでは同時に2つ以上のスレッドが1つのデータを操作すると結果が予測できません。それをParallel Inspectorは検出したのです。

 これさえ分かれば問題を解決したのも同然です。この短いサンプルプログラムでは効果が分かりにくいかもしれませんが、実務では数十万行以上のC/C++コードでデバッグすることが十分にありえます。そんな大量のコードの中から問題部分を探すのは大変骨が折れる作業です。それを自動かつ正確に検出できるのですから大変便利なツールです。

まとめ

 今回の記事では並列プログラミング時のデバッグ作業が大変であり、その作業を助けるツールが必須であることを解説しました。また、よいツールとしてParallel Inspectorがあることを示し、簡単なサンプルコードを解析して大変便利なツールであることを確認しました。

 今回は駆け足で解説しましたので、まだまだParallel Inspectorの機能を紹介しきれていません。読者の方はぜひ実際に体験版を入手してお試しください。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2009/09/23 06:59 コメント欄にてのご指摘により不備が見つかりましたので、メモリエラーの修正に関する事柄を修正しました。

  • 2009/09/14 20:28 コメント欄にて関数名が間違っているとのご指摘を受けましたのでProducerに訂正しました。

著者プロフィール

  • インドリ(インドリ)

    分析・設計・実装なんでもありのフリーエンジニア。 ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。 アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。 座右の銘は温故知新で、新旧関係なく必要だと考えた...

バックナンバー

連載:インテルソフトウェア開発製品による並列化プログラミング
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5