SHOEISHA iD

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

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

インテルソフトウェア開発製品による並列化プログラミング(AD)

マルチコア時代の定番チューニングツール
「インテルParallel Studio 2011」

インテルParallel Studio 2011の新機能紹介

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

Parallel Inspector 2011の新機能

 Parallel Inspector 2011は、メモリーリークやスレッド間のデータ競合といった、並列化処理を実装する際に発生する問題も解析可能なツールです。

 今回のバージョンでは、以下のような新機能が追加されています。

  • Cilk Plusのサポート
  • リソースリーク検出機能

 本節ではリソースリーク検出機能について紹介します。

リソースリーク検出

 Parallel Inspectorは以前のバージョンからメモリリークの検出機能を持っていましたが、今回のバージョンから、リソースリークの検出機能が追加されました。これは、WindowsのUI機能を提供するGDIと、カーネルのリソースを取得したまま、解放処理を行っていない箇所について検出する機能です。

 例えば、GDI、カーネルそれぞれで、以下のようにリソースを使用する関数を呼び、使用後にきちんとリソースを開放していない場合、リソースリークが発生します。

表5 GDI、カーネルでリソースを使用する関数と、忘れるとリソースリークになる処理
  呼び出す関数 使用後に行うべき処理
GDI CreateBitmap(ビットマップ作成)
CreateDC(デバイスコンテキスト作成)
CreateFont(フォント作成)など
DeleteObject関数でハンドルの削除
カーネル CreateThread(スレッド作成)
CreateProcess(プロセス作成)
HeapCreate(ヒープオブジェクト作成)など
CloseHandle関数でリソースを削除
(HeapCreate関数に対してはHeapDestroy関数)

 サンプルでリソースリーク検出を確認してみましょう。以下はスレッドを作成したのに、CloseHandle関数を呼び出し忘れたケースです。

CreateThread関数の後処理を忘れてリソースリークが発生するケース
//何もしないスレッド関数
DWORD WINAPI thread(LPVOID vdParam) {
  return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
  //スレッドを生成
  HANDLE hThread = CreateThread(0, 8192, thread, NULL, 0, NULL);
  //CloseHandle関数を呼び忘れた!
  //CloseHandle(hThread);
  return 0;
}

 Visual Studio 2010で以上のソースをビルドし、画面上部のツールバーから、[Inspect]ボタンをクリックします。

図3 Parallel Inspector 2011ツールバーの[Inspect]ボタンで検出処理を行う
図3 Parallel Inspector 2011ツールバーの[Inspect]ボタンで検出処理を行う

 表示される[Configure Analysis]ダイアログでは、[Analysis Type](検出する内容)を[Memory Errors]と[Threading Errors]から選択します。

図4 [Configure Analysis]ダイアログで[Analysis Type]を選択
図4 [Configure Analysis]ダイアログで[Analysis Type]を選択

 それぞれ以下のエラーを検出できます。

表6 Analysis Typeと検出されるエラー
Analysis Type 検出されるエラー
Memory Errors メモリリーク、リソースリークなど
Threading Errors データ競合など

 今回はリソースリークを検出するため[Memory Errors]を選択しましょう。

 また同じダイアログでは、検出の詳細度も選択できます。詳細な検出を行うほど処理時間が掛かります。今回は一番軽い処理の[Does my target leak memory?]を選択しましょう。

 [Run analysis]ボタンをクリックすると、アプリケーションが実行され、終了後エラーが検出されます。今回は図のようにカーネルのリソースリークが検出されています。

図5 Parallel Inspector 2011によるエラー検出結果。[Kernel resource leak]が検出される
図5 Parallel Inspector 2011によるエラー検出結果。[Kernel resource leak]が検出される

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

図6 カーネルリソースリークが発生している行にフォーカス
図6 カーネルリソースリークが発生している行にフォーカス

 小さなサンプルであればこうした問題の発見は手動でも用意ですが、大規模なアプリケーション開発では、以前からサポートされていたメモリリークの検出に加え、今回からサポートされたリソースリークの検出は大いに役立つことでしょう。

まとめ

 今後のアプリケーション開発において、並列化というテーマは不可避になっていくことでしょう。つまり「並列化するか否か」ではなく「どのように並列化するか」を中心に考えていく必要があります。

 Parallel Studio 2011で新たにサポートされたCilk Plusは、複雑なマルチスレッドコードを書くことなく、シンプルな記法で並列化処理を実現することができます。まだ日本語の情報源も少ない状態ですが、ぜひ活用しましょう。

 アプリケーションの並列化において有益な情報源として、Intel社からリリースされているマルチスレッドアプリ開発ガイド」の日本語版がParallel Studio 2011の日本発売元であるエクセルソフト社のサイトで公開されています。

 この開発ガイドでは、マルチスレッドアプリケーションの開発に伴って検討すべき要素を、基本的な理論から具体的な実装方法まで解説しています。(以前のバージョンではありますが)Parallel Studioの実践的な使用方法についても解説していますので、ぜひ参照してください。

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

  • このエントリーをはてなブックマークに追加
インテルソフトウェア開発製品による並列化プログラミング連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、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 Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

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

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5484 2010/10/13 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング