SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事(AD)

ハイエンドなアプリケーションのためのツール・スイート「インテル Parallel Studio XE 2011」

Parallel Studio XE 2011の新機能紹介

  • X ポスト
  • このエントリーをはてなブックマークに追加

Inspector XEの新機能

 Inspector XEは、メモリーリークやスレッド間のデータ競合といった並列化処理を実装する際に発生する問題を解析するためのツールです。前バージョンであるインテル スレッドチェッカーに対して、以下のような新機能が搭載されています。

  • スレッドエラーに加え、メモリーエラーの検出もサポート
  • C++ Composer XEとの連携による、ソースコードの静的分析によるメモリー、スレッドエラーの検出のサポート
  • .NETマネージコードの解析をサポート

 なお、Inspector XEはインテル スレッドチェッカーからのバージョンアップということもあり、UIはParallel Studio 2011に搭載されたParallel Inspector 2011とはやや異なります。ただし、メモリーエラーやスレッドエラーの検出と、検出後の原因となったソースコードの確認の流れなどは、Parallel Inspector 2011と同様の流れで行うことができます。

 今回は新機能である.NETのマネージコードの解析をサンプルで見てみましょう。

マネージコードのスレッドエラー解析

 Inspector XEのマネージコード解析機能は、現在のところスレッドエラーのみに限られており、メモリーエラーの検出は行えません。

 今回はマルチスレッドでデッドロックが起きるケースについて、解析を行ってみましょう。

 リスト4は、リソースAとBを2つのスレッドが逆の順番で取り合うことにより、デッドロックが起きるケースです。スレッド1はリソースをA、Bの順に、スレッド2はリソースをB、Aの順に取得しようとしますが、実行タイミングによっては2つめに取得するリソースが別のスレッドによってロックされているため、リソースを取得することも、ロックしているリソースを解放することもできなくなってしまいます。

リスト4 デッドロックのサンプル(DeadLockTest\Program.cs)
class Program
{
  private static Object resA = new Object(); //リソースA
  private static Object resB = new Object(); //リソースB

  public static void Main()
    {
      Thread thread1 = new Thread(new ThreadStart(Thread1)); 
      thread1.Start(); //スレッド1開始
      Thread2(); //メインがスレッド2となる
    }

  //A,Bの順でロック
  private static void Thread1()
    {
      lock (resA) //リソースAをロック
        {
          Thread.Sleep(1000);

          lock (resB) //リソースBをロック
            {
              Thread.Sleep(100);
            }
        }
    }

  //B,Aの順でロック
  private static void Thread2()
    {
      lock (resB)
        {
          Thread.Sleep(1000);

          lock (resA)
            {
              Thread.Sleep(100);
            }
        }
    }

}

 Visual Studio 2010で以上のソースをビルドし、図1のような画面上部のInspector XEツールバーから、解析アイコンをクリックします。

図1 Inspector XEツールバーの解析アイコンで解析を行う
図1 Inspector XEツールバーの解析アイコンで解析を行う

 表示される[Configure Analysis Type]画面では、[Analysis Type](検出する内容)を[Memory Error Analysis]と[Threading Error Analysis]から選択できます。今回はスレッドエラーを検出するため[Threading Error Analysis]-[Detect Deadlocks]を選び、[Terminate on deadlock]をチェックして[Start]ボタンを押します。このチェックは、デッドロック発生時にアプリケーションを終了させるためのものです。

図2 [Threading Error Analysis]-[Detect Deadlocks]を選択する
図2 [Threading Error Analysis]-[Detect Deadlocks]を選択する

 アプリケーションの実行中、複数のスレッドによってデッドロックが発生したことをInspector XEが検出すると、自動的にアプリケーションを終了させます。

 解析結果の収集が行われた後、図3のような検出結果画面が表示されます。画面上部(Problems部分)に問題が表示され、下部(Code Locations)に問題となるコードの箇所が表示されます。今回はDeadlockがProgram.csの4つの行で発生していることが確認できます。

図3 Inspector XEによるエラー検出結果。[Deadlock]が検出される
図3 Inspector XEによるエラー検出結果。[Deadlock]が検出される

 該当する行をダブルクリックすると、以下のように該当する行が表示されます。

図4 デッドロックが発生している行にフォーカス
図4 デッドロックが発生している行にフォーカス

 これまでネイティブコードに限定されていた並列化エラーの解析がマネージコードでも可能になったことは大きなメリットです。もちろんInspector XEではネイティブコードにおけるメモリーエラー、スレッドエラーの解析機能も向上していますので、並列化アプリケーションの実装の際に発生する問題の解決に役立つことでしょう。

次のページ
VTune Amplifier XEの機能紹介

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 土井 毅(ドイ ツヨシ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5590 2010/11/26 14:30

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング