インテル® Inspector チュートリアル: C++ サンプル・アプリケーションのスレッドエラーを解析する (Windows* 版)

インテル® Inspector

この記事は、インテル® デベロッパー・ゾーンに公開されている「Tutorial: Analyzing Threading Errors With Intel® Inspector and a C++ Sample Application for Windows*」の日本語参考訳です。


この記事の PDF 版はこちらからご利用になれます。

目次
スレッドエラー解析の使用例
ナビゲーションのクイックスタート
Visual Studio* IDE: プロジェクトの選択とアプリケーションのビルド
スタンドアロン GUI: アプリケーションのビルドと新規プロジェクトの作成
解析の設定
解析の実行
問題の選択
結果データの解釈
問題の解決
リビルドと解析の再実行
まとめ
法務上の注意書き

インテル® Inspector は、Windows* および Linux* でシリアル・アプリケーションおよびマルチスレッド・アプリケーションを開発するユーザー向けの、メモリーとスレッドのエラーを動的にチェックするツールです。

このチュートリアルでは、C++ サンプル・アプリケーションを使用して、Windows* プラットフォームでインテル® Inspector を利用してスレッドエラーを解析する方法を示します。

インテル® Inspector は、スタンドアロン製品として、または次の製品のコンポーネントとして利用できます。

  • インテル® System Studio Professional Edition
  • インテル® System Studio Ultimate Edition
  • インテル® Parallel Studio XE Professional Edition
  • インテル® Parallel Studio XE Cluster Edition
  • ベータ版インテル® oneAPI HPC ツールキット
  • ベータ版インテル® oneAPI IoT ツールキット
チュートリアルの概要 このチュートリアルでは、最終的に独自のアプリケーションに適用可能なエンドツーエンドのワークフローを示します。
  1. 調査に最適なアプリケーションをビルドします。
  2. アプリケーションを調査してスレッドエラーを見つけます。
  3. アプリケーション・コードを編集してスレッドエラーを修正します。
  4. アプリケーションをリビルドして再度調査します。

このチュートリアルは、バージョン 2017 以降向けに作成されています。バージョン 2018 以降では、スクリーンショットの背景色が異なります。

所要時間 10 – 15 分
目的 このチュートリアルでは、以下のトピックについて説明します。
  • インテル® Inspector を使用してスレッドエラーを見つけて修正する手順をリストします。
  • 主要なインテル® Inspector の用語を定義します。
  • 最も正確で完全な解析結果を生成するコンパイラー/リンカーオプションを特定します。
  • スレッドエラー解析を実行します。
  • 解析の範囲と実行時間に影響を与えます。
  • インテル® Inspector の結果ウィンドウを使用します。
  • エラーを修正するため優先順位付けされた To Do リストを表示します。
  • 特定のエラーを修正するためヘルプを利用します。
  • エラーを修正するためソースコードにアクセスします。
関連情報 このチュートリアルの概念と手順は、プログラミング言語に関係なく適用されますが、別のプログラミング言語のサンプル・アプリケーションを使用したチュートリアルも用意されています。

これらのサイトでは、ほかのインテル® 製品のチュートリアルも提供されています。

さらに、以下のサイトから追加のリソースを利用できます。

目次に戻る


スレッドエラー解析の使用例

強力で柔軟性に優れたインテル® Inspector を活用する方法はたくさんあります。並列プログラムのスレッドエラーを見つけて修正する次のワークフローは、生産性を迅速かつ最大限に高める 1 つの方法です。

スレッドエラーを見つけて修正するワークフロー

このチュートリアルは、次の方法でこのワークフローを実装します。

ステップ 1:
サンプルの展開と解析用の設定
次のいずれかを行います。
ステップ 2:
結果の収集
ステップ 3:
結果の調査
ステップ 4:
作業の確認
アプリケーションをリビルドして、スレッドエラー解析を再度実行します。

目次に戻る


ナビゲーションのクイックスタート

インテル® Inspector 環境を設定する


インテル® Inspector 環境の設定は、inspxe-gui コマンドでインテル® Inspector スタンドアロン GUI を起動する場合、または inspxe-cl コマンドでコマンドライン・インターフェイスを実行する場合のみ必要です。

インテル® Parallel Studio XE に含まれるインテル® Inspector では、次のいずれかの方法で環境を設定します。

  • <inspector-install-dir>\inspxe-vars.bat コマンドを実行します。

    デフォルトのインストール先 <inspector-install-dir> は、C:\Program Files (x86)\IntelSWTools\ 以下です (システムによっては、ディレクトリー名が Program Files (x86) ではなく Program Files になります)。

  • <studio-install-dir>\psxevars.bat コマンドを実行します。

    デフォルトのインストール先 <studio-install-dir> は、C:\Program Files (x86)\IntelSWTools\ 以下です。

インテル® System Studio に含まれるインテル® Inspector では、<inspector-install-dir>\inspxe-vars.bat コマンドを実行して環境を設定します。デフォルトのインストール先 <inspector-install-dir> は、C:\Program Files (x86)\IntelSWTools\ 以下です (システムによっては、ディレクトリー名が Program Files (x86) ではなく Program Files になります)。

インテル® oneAPI HPC ツールキットまたはインテル® oneAPI IoT ツールキットに含まれるインテル® Inspector では、<oneapi-install-dir>\env\vars.bat コマンドを実行します。デフォルトのインストール先 <oneapi-install-dir> は、C:\Program Files (x86)\inteloneapi\ 以下です。

インテル® Inspector スタンドアロン GUI を開く

インテル® Parallel Studio XE に含まれるインテル® Inspector スタンドアロン GUI では、次のいずれかの操作を行います。

  • inspxe-gui コマンドを実行します。
  • Microsoft* Windows* 7 の [スタート] メニューから、[Intel Parallel Studio XE version] > [Analyzers] > [Intel Inspector version] を選択します。
  • Microsoft* Windows* 8/8.1/10 の [すべてのアプリ] 画面から、[Intel Parallel Studio XE version] > [Intel Inspector version] を選択します。

インテル® System Studio XE に含まれるインテル® Inspector スタンドアロン GUI では、次のいずれかの操作を行います。

  • inspxe-gui コマンドを実行します。
  • Microsoft* Windows* 7 の [スタート] メニューから、[Intel System Studio XE version for Windows target] > [Analyzers] > [Intel Inspector version for Systems] を選択します。
  • Microsoft* Windows* 8/8.1/10 の [すべてのアプリ] 画面から、[Intel System Studio XE version for Windows target] > [Analyzers] > [Intel Inspector version for Systems] を選択します。

インテル® Inspector スタンドアロン GUI を使用する

インテル® Inspector スタンドアロン GUI

メニュー、ツールバー、および [Project Navigator] は、多くの同じ機能を実行する異なる方法を提供します。
A メニューを使用して、プロジェクトや動的解析結果の作成、結果のアーカイブファイルやインテルのほかのエラー検出製品からの結果のインポート、プロジェクトや結果を開く、プロジェクトの比較、プロジェクトの設定、さまざまなオプションの設定、入門ページやヘルプへのアクセスを行います。
B ツールバーを使用して、入門ページを開く、プロジェクトの作成、設定、または開く、動的解析結果の作成、結果の比較を行います。
C [Project Navigator] を使用して、次の操作を行います。
  • ツリーは、プロジェクトのディレクトリー構造に基づいてプロジェクトと結果を階層表示します。
  • コンテキスト・メニュー (右クリックで表示) は、メニューやツールバーから利用可能な機能の実行、選択したプロジェクトや結果の削除または名前変更、開いている結果をすべて閉じる、さまざまなディレクトリー・パスのシステムのクリップボードへのコピーを行います。

Microsoft* Visual Studio* IDE でインテル® Inspector を使用する

インテル® Inspector/Visual Studio* プラグイン

メニュー、ツールバー、および [ソリューション エクスプローラー] は、多くの同じ機能を実行する異なる方法を提供します。
A [ツール] > [Intel Inspector version] メニューを使用して、解析結果の作成、結果の比較、結果のアーカイブファイル、プロジェクトに関連付けられていない結果、またはインテルのほかのエラー検出製品の結果の現在のプロジェクトへのインポートを行います。
B インテル® Inspector ツールバーを使用して、入門ページを開く、解析結果の作成、結果の比較、プロジェクトの設定を行います。
C [ソリューション エクスプローラー] コンテキスト・メニュー (右クリックで表示) を使用して、次の操作を行います。
  • [ソリューション エクスプローラー] コンテキスト・メニューから [Intel Inspector version] を選択して、解析結果を作成してプロジェクトを設定します。
  • プロジェクトの結果フォルダー内の結果のコンテキスト・メニューを使用して、結果を開く、解析結果の作成、結果の再ファイナライズ (再解決)、結果のエクスポート、結果の管理を行います。

インテル® Inspector の結果タブを使用する

インテル® Inspector の結果タブ

1 結果タブの名前で結果を区別します。
2 ナビゲーション・ツールバーのボタンをクリックしてウィンドウを切り替えます。
3 ウィンドウペインで結果データを表示および管理します。
4 ヘルプボタン ボタンをクリックしてウィンドウペインの使用法に関するヘルプページを表示します。
5 ウィンドウペインの境界をドラッグしてウィンドウペインのサイズを変更します。
6 ペインの切り替えアイコンペインの切り替えアイコンペインの切り替えアイコン、および ペインの切り替えアイコン をクリックしてウィンドウペインの表示/非表示を切り替えます。
7 ウィンドウペインのデータ・コントロールをクリックして、ペイン内 (および可能な場合は隣接するペイン) の結果データを調整します。
8 タイトルバーでウィンドウペインを識別します。
9 データの列見出し – データ列をドラッグして配置を変更します。左または右の境界をドラッグしてデータ列のサイズを変更します。列見出しをクリックして結果を昇順または降順に並べ替えます。
10 ウィンドウペインでデータを右クリックして、主要機能へのアクセスを提供するコンテキスト・メニューを表示します。

目次に戻る


Visual Studio* IDE: プロジェクトの選択とアプリケーションのビルド

ここで紹介する手順は、インテル® Inspector の Visual Studio* IDE プラグインを使用している場合のみ実施してください。

インテル® Inspector でスレッドエラーを調査可能なアプリケーションを作成します。

ソフトウェア・ツールを取得する

tachyon_insp_xe サンプル・アプリケーションを使用してチュートリアルの手順を実施するには、次のツールが必要です。

  • インテル® Inspector のインストール・パッケージとライセンス
  • .zip ファイルの展開ユーティリティー
  • サポートされるコンパイラー (詳細はリリースノートを参照)

インテル® Inspector を取得する

インテル® Inspector をまだインストールしていない場合は、https://www.isus.jp/intel-inspector-xe/ から評価版をダウンロードします。

インテル® Inspector サンプル・アプリケーションをインストールして設定する

  1. tachyon_insp_xe.zip ファイルを <install-dir>\samples\<locale>\C++\ ディレクトリーから書き込み可能なディレクトリーへコピーするか、システムで共有します。デフォルトの <install-dir> は、C:\Program Files (x86)\Intel\ 以下です (システムによっては、ディレクトリー名が Program Files (x86) ではなく Program Files になります)。
  2. .zip ファイルからサンプルを展開します。

  • サンプルは非決定的です。このチュートリアルで示すスクリーンショットは、実際の画面とは異なる場合があります。
  • サンプルは、インテル® Inspector の機能を説明することを目的としており、コード作成のベスト・プラクティスを示すものではありません。

Visual Studio* ソリューションを開く

  1. [ファイル] > [開く] > [プロジェクト/ソリューション] を選択します。
  2. [プロジェクトを開く] ダイアログボックスで tachyon_insp_xe\vc10\tachyon_insp_xe.sln ファイルを開いて、[ソリューション エクスプローラー]tachyon_insp_xe ソリューションを表示します。


    tachyon_insp_xe.sln ソリューションは Visual Studio* 2010 IDE で作成されています。Visual Studio* 変換ウィザードが表示された場合は、インストールされているバージョンの Visual Studio* IDE でソリューションが動作するように、画面の指示に従ってソリューションを変換してください。

スタートアップ・プロジェクトを選択する

find_and_fix_threading_errors プロジェクトがスタートアップ・プロジェクトに設定されていない場合 ([ソリューション エクスプローラー] でプロジェクト名が太字で表示されていない場合)、次の操作を行います。

  1. [ソリューション エクスプローラー]find_and_fix_threading_errors プロジェクトを右クリックします。
  2. [スタートアップ プロジェクトに設定] を選択します。プロジェクト名が太字に変わります。

最適なコンパイラー/リンカー設定を理解する

インテル® Inspector は、デバッグモードとリリースモードの C++ および Fortran バイナリーでメモリーとスレッドのエラーを解析できますが、次の設定を使用してデバッグモードでコンパイル/リンクされたアプリケーションにおいて最も正確で完全な解析結果を生成します。

コンパイラー/リンカーのプロパティー 適切な C/C++ 設定 不適切な設定による影響
デバッグ情報 有効 (/Zi または /ZI) ファイル/行情報の欠落
最適化 無効 (/Od) 正しくないファイル/行情報
ダイナミック・ランタイム・ライブラリー 選択 (/MD または /MDd) 誤検出またはコード位置の欠落
基本ランタイム・エラー・チェック 無効 (Visual Studio* IDE のデフォルトのオプションである /RTC は使用しない) 誤検出
コンパイラー/リンカーのプロパティー 適切な Fortran 設定 不適切な設定による影響
デバッグ情報 有効 (/debug:full) ファイル/行情報の欠落
最適化 無効 (/Od) 正しくないファイル/行情報
ダイナミック・ランタイム・ライブラリー 選択 (/libs:dll/threads または libs:dll/threads/dbglibs ) 誤検出またはコード位置の欠落
基本ランタイム・エラー・チェック なし (/check:none) 誤検出

サンプルコードは、すでに適切に設定されています。アプリケーションの設定を変更する必要がある場合は、次の手順に従ってください。

  1. Visual Studio* の標準ツールバーで [ソリューション構成] ドロップダウンが Release に設定されている場合は Debug に変更します。
  2. [ソリューション エクスプローラー]find_and_fix_threading_errors プロジェクトを右クリックして、[プロパティ] を選択して [プロパティ ページ] ダイアログボックスを表示します。
  3. 左のペインで、[構成プロパティ] > [C/C++] を選択します。
    • [全般] を選択して、[デバッグ情報の形式] フィールドが [プログラム データベース (/Zi)] または [エディット コンティニュ用プログラム データベース (/ZI)] に設定されていることを確認します。
    • [最適化] を選択して、[最適化] フィールドが [無効 (/Od)] に設定されていることを確認します。
    • [コード生成] を選択します。[ランタイム ライブラリ] フィールドが [マルチスレッド DLL (/MD)] または [マルチスレッド デバッグ DLL (/MDd)] に設定されており、[基本ランタイム チェック] フィールドが [規定] に設定されていることを確認します。
  4. 左のペインで、[構成プロパティ] > [リンカー] > [デバッグ] を選択して、[デバッグ情報の生成] フィールドが [デバッグ情報の生成 (/DEBUG)] に設定されていることを確認します。
  5. [適用] ボタンをクリックしてから、[OK] ボタンをクリックして [プロパティ ページ] ダイアログボックスを閉じます。

アプリケーションをビルドしてテストする

  1. [ビルド] > [ソリューションのビルド] を選択して、ソリューション内のすべてのプロジェクトをビルドします。
  2. [出力] ウィンドウのメッセージを確認して、ビルドが正常に終了したことを確認します。
  3. [デバッグ] > [デバッグなしで開始] を選択して、アプリケーションをテストします。
  4. アプリケーションの非決定的な出力は次のようになります。

    アプリケーションの出力

    イメージ内に色落ちしたドットがあります。原因はスレッドエラーです。

目次に戻る


スタンドアロン GUI: アプリケーションのビルドと新規プロジェクトの作成

ここで紹介する手順は、インテル® Inspector のスタンドアロン GUI を使用する場合のみ実行してください。

インテル® Inspector でスレッドエラーを調査可能なアプリケーションを作成します。

ソフトウェア・ツールを取得する

tachyon_insp_xe サンプル・アプリケーションを使用してチュートリアルの手順を実施するには、次のツールが必要です。

  • インテル® Inspector のインストール・パッケージとライセンス
  • .zip ファイルの展開ユーティリティー
  • サポートされるコンパイラー (詳細はリリースノートを参照)

インテル® Inspector を取得する

インテル® Inspector をまだインストールしていない場合は、https://www.isus.jp/intel-inspector-xe/ から評価版をダウンロードします。

インテル® Inspector サンプル・アプリケーションをインストールして設定する

  1. tachyon_inxp_xe.zip ファイルを <install-dir>\samples\<locale>\C++\ ディレクトリーから書き込み可能なディレクトリーへコピーするか、システムで共有します。デフォルトの <install-dir> は、C:\Program Files (x86)\Intel\ 以下です (システムによっては、ディレクトリー名が Program Files (x86) ではなく Program Files になります)。
  2. .zip ファイルからサンプルを展開して、tachyon_insp_xe ディレクトリーを作成します。

  • サンプルは非決定的です。このチュートリアルで示すスクリーンショットは、実際の画面とは異なる場合があります。
  • サンプルは、インテル® Inspector の機能を説明することを目的としており、コード作成のベスト・プラクティスを示すものではありません。

最適なコンパイラー/リンカー設定を理解する

インテル® Inspector は、デバッグモードとリリースモードの C++ および Fortran バイナリーでメモリーとスレッドのエラーを解析できますが、次の設定を使用してデバッグモードでコンパイル/リンクされたアプリケーションにおいて最も正確で完全な解析結果を生成します。

コンパイラー/リンカーのプロパティー 適切な C/C++ 設定 不適切な設定による影響
デバッグ情報 有効 (/Zi または /ZI) ファイル/行情報の欠落
最適化 無効 (/Od) 正しくないファイル/行情報
ダイナミック・ランタイム・ライブラリー 選択 (/MD または /MDd) 誤検出またはコード位置の欠落
基本ランタイム・エラー・チェック 無効 (Visual Studio* IDE のデフォルトのオプションである /RTC は使用しない) 誤検出
コンパイラー/リンカーのプロパティー 適切な Fortran 設定 不適切な設定による影響
デバッグ情報 有効 (/debug:full) ファイル/行情報の欠落
最適化 無効 (/Od) 正しくないファイル/行情報
ダイナミック・ランタイム・ライブラリー 選択 (/libs:dll/threads または libs:dll/threads/dbglibs ) 誤検出またはコード位置の欠落
基本ランタイム・エラー・チェック なし (/check:none) 誤検出

アプリケーションをビルドする

  1. ご使用の Visual Studio* と OS 用の Visual Studio Tools から、コマンド・プロンプト・ショートカットのいずれかを選択します。例えば、Microsoft* Windows* 10 の [すべてのアプリ] 画面から [Visual Studio 2013] > [Visual Studio Tools] > [VS 2013 用 x64 Native Tools コマンド プロンプト] を選択します。
  2. コマンド プロンプト・ウィンドウで、ディレクトリーを .zip ファイルの展開先の tachyon_inspxe\ に変更します。
  3. Microsoft* Visual Studio* 2012 以降を使用する場合、次のコマンドを実行して tachyon_insp_xe.sln ソリューションを変換します。
    devenv vc10\tachyon_insp_xe.sln /Upgrade
  4. 次のコマンドを実行して、ソリューション内のすべてのプロジェクトをビルドします。
    devenv vc10\tachyon_insp_xe.sln /Build

アプリケーションがインテル® Inspector の外部で実行されることを確認する

  1. ディレクトリーを vc10\find_and_fix_threading_errors_Win32\Debug\ に変更します。
  2. 次のコマンドでアプリケーションを実行します。
    find_and_fix_threading_errors.exe ..\..\..\dat\simpleballs.dat
  3. アプリケーションの非決定的な出力は次のようになります。

    アプリケーションの出力

    イメージ内に色落ちしたドットがあります。原因はスレッドエラーです。

ヒント
コマンド・プロンプト・ウィンドウは開いたままにします。

インテル® Inspector 環境を設定する


インテル® Inspector 環境の設定は、inspxe-gui コマンドでインテル® Inspector スタンドアロン GUI を起動する場合、または inspxe-cl コマンドでコマンドライン・インターフェイスを実行する場合のみ必要です。

インテル® Parallel Studio XE に含まれるインテル® Inspector では、次のいずれかの方法で環境を設定します。

  • <inspector-install-dir>\inspxe-vars.bat コマンドを実行します。

    デフォルトのインストール先 <inspector-install-dir> は、C:\Program Files (x86)\IntelSWTools\ 以下です (システムによっては、ディレクトリー名が Program Files (x86) ではなく Program Files になります)。

  • <studio-install-dir>\psxevars.bat コマンドを実行します。

    デフォルトのインストール先 <studio-install-dir> は、C:\Program Files (x86)\IntelSWTools\ 以下です。

インテル® System Studio に含まれるインテル® Inspector では、<inspector-install-dir>\inspxe-vars.bat コマンドを実行して環境を設定します。デフォルトのインストール先 <inspector-install-dir> は、C:\Program Files (x86)\IntelSWTools\ 以下です (システムによっては、ディレクトリー名が Program Files (x86) ではなく Program Files になります)。

インテル® oneAPI HPC ツールキットまたはインテル® oneAPI IoT ツールキットに含まれるインテル® Inspector では、<oneapi-install-dir>\env\vars.bat コマンドを実行します。デフォルトのインストール先 <oneapi-install-dir> は、C:\Program Files (x86)\inteloneapi\ 以下です。

インテル® Inspector スタンドアロン GUI を開く

インテル® Parallel Studio XE に含まれるインテル® Inspector スタンドアロン GUI では、次のいずれかの操作を行います。

  • inspxe-gui コマンドを実行します。
  • Microsoft* Windows* 7 の [スタート] メニューから、[Intel Parallel Studio XE version] > [Analyzers] > [Intel Inspector version] を選択します。
  • Microsoft* Windows* 8/8.1/10 の [すべてのアプリ] 画面から、[Intel Parallel Studio XE version] > [Intel Inspector version] を選択します。

インテル® System Studio に含まれるインテル® Inspector スタンドアロン GUI では、次のいずれかの操作を行います。

  • inspxe-gui コマンドを実行します。
  • Microsoft* Windows* 7 の [スタート] メニューから、[Intel System Studio version for Windows target] > [Analyzers] > [Intel Inspector version for Systems] を選択します。
  • Microsoft* Windows* 8/8.1/10 の [すべてのアプリ] 画面から、[Intel System Studio XE version for Windows target] > [Analyzers] > [Intel Inspector version for Systems] を選択します。

新しいプロジェクトを作成する

  1. [File] > [New] > [Project…] を選択して、次のようなダイアログボックスを表示します。

    [Create a Project] ダイアログボックス

  2. [Project name] フィールドに threading と入力します。[Create project] ボタンをクリックして、\Inspector\Projects\threading\ ディレクトリー (デフォルトの場所) に config.inspxeproj ファイルを生成します。次のようなダイアログボックスが表示されます。

    [Project Properties] ダイアログボックスの [Target] タブ

  3. [Application] フィールドの横にある [Browse…] ボタンをクリックして、tachyon_insp_xe\vc10\find_and_fix_threading_errors_Win32\Debug\find_and_find_threading_errors.exe アプリケーションを選択します。インテル® Inspector によって [Working directory] フィールドに値が自動入力されます。
  4. [Application Parameters] フィールドの横にある [Modify…] ボタンをクリックします。[Application Parameters] ウィンドウで、[Browse to insert file path] ボタンをクリックします。表示される [Select File] ウィンドウで、ファイルの種類を [All Files (*.*)] に変更して tachyon_insp_xe\dat\simpleballs.dat ファイルを選択し、[開く] ボタンをクリックします。[OK] ボタンをクリックして [Application Parameters] ウィンドウを閉じたら、[OK] ボタンをクリックして [Welcome] ページに戻ります。開いたプロジェクトの名前がタイトルバーと [Project Navigator] ペインに表示されます(必要に応じて、[View] > [Project Navigator] を選択して [Project Navigator] を表示します)。

目次に戻る


解析の設定

インテル® Inspector には、解析の範囲とコストの制御を支援するため、事前定義済みのさまざまなスレッド解析タイプが用意されています。範囲が最も狭い解析タイプは、システムの負荷、および解析の実行に必要な時間とリソースが最小になりますが、最も少ないエラーセットを検出し、最小限の情報のみ提供します。範囲が最も広い解析タイプは、システムの負荷、および解析の実行に必要な時間とリソースが最大になりますが、最も多くのエラーセットを検出し、最も詳細な情報を提供します。

スレッドエラー解析を設定します。

[Analysis Type] ウィンドウを理解する

次のような [Analysis Type] ウィンドウを表示します。

  1. 次のいずれかを行います。
    • Visual Studio* のメニューから、[ツール] > [Intel Inspector version] > [New Analysis…] を選択します。
    • インテル® Inspector スタンドアロン GUI のメニューから、[File] > [New] > [Analysis…] を選択します。
  2. 解析タイプ・ドロップダウン・リストから [Threading Error Analysis] を選択します。
  3. スライダーを使用して [Detect Deadlocks and Data Races] 解析タイプを選択します。


ウィンドウに 3 つのインタラクティブなデバッガー・ラジオボタンが表示される場合があります。

[Analysis Type] ウィンドウ

1 ナビゲーション・ツールバーを使用してインテル® Inspector のウィンドウを切り替えます。ツールバーのボタンは、表示されるウィンドウにより異なります。
2 解析タイプ・ドロップダウン・リストから解析タイプカテゴリーを選択します。[Memory Error Analysis][Threading Error Analysis]、または [Custom Analysis Types] を選択できます。


このチュートリアルでは、スレッドエラー解析タイプについて説明します。この解析タイプでは、データ競合、デッドロック、ロック階層違反、スレッド間スタック・アクセス・エラーを検出できます。メモリーエラー解析は、リソースリーク、不正な memcpy 呼び出し、無効な割り当て解除、無効なメモリーアクセス、無効な部分メモリーアクセス、メモリー拡張、メモリーリーク、割り当て解除されていないメモリー、割り当て/割り当て解除の不一致、割り当てられていないメモリー、初期化されていないメモリーアクセス、初期化されていない部分メモリーアクセスなどのエラーを検出します。

3 スライダーを使用して、事前定義済みの解析タイプと対応するゲージを選択し、コストを評価します。スライダーの最上部の解析タイプは範囲が最も狭く、最下部の解析タイプは範囲が最も広いです。

[Analysis Time Overhead] ゲージは、選択した解析タイプで結果の収集にかかる時間を素早く予測するのに役立ちます。収集時間は、通常のアプリケーション実行時間の倍数で表されます。例えば、10x – 40x は、通常のアプリケーション実行時間の 10 ~ 40 倍の時間がかかることを示します。つまり、通常のアプリケーション実行時間が 5 秒の場合、予測される収集時間は 50 ~ 200 秒になります。

[Memory Overhead] ゲージは、選択した解析タイプでインテル® Inspector がエラー検出に使用するメモリー量を素早く予測するのに役立ちます。メモリー使用量に応じて、バーが青く塗りつぶされます。


解析中、アプリケーションの実行に使用されたメモリー量はゲージに含まれません。

4 チェックボックスとドロップダウン・リストを使用して、事前定義済みの解析タイプの一部の設定を細かく調整します (すべての設定を調整できるわけではありません)。


解析タイプの設定をさらに細かく調整する必要がある場合は、別の解析タイプを選択するか、カスタム解析タイプを作成します。

5 [Details] 領域は、この解析タイプのすべての設定を表示します。
6 コマンドツールバーは、解析の実行を制御したり、その他の機能を実行します。例えば、[Project Properties…] ボタンは、デフォルトの結果ディレクトリーの場所を変更したり、解析をスピードアップする可能性があるパラメーターを設定したり、プロジェクトの設定に関するその他の機能を実行できる [Project Properties] ダイアログボックスを表示します。[Command Line…] ボタンは、インテル® Inspector コマンドライン・インターフェイス (inspxe-cl コマンド) で同じ解析を実行するコマンドを確認して、必要に応じてクリップボードにコピーできる [Corresponding inspxe-cl Command Options] ダイアログボックスを表示します。

スレッドエラー解析タイプを選択する

次のステップに進む前に、設定内容が上記のスクリーンショットと一致していることを確認してください。インタラクティブなデバッガー・ラジオボタンが表示されている場合は、[Analyze without Debugger] ラジオボタンがオンになっていることを確認してください。

目次に戻る


解析の実行

修正が必要なスレッドエラーを検出するには、[Analysis Type] ウィンドウの [Start] ボタンをクリックします。インテル® Inspector は、次の処理を実行します。

  • find_and_fix_threading_errors.exe アプリケーションを実行します。
  • 対応が必要なスレッドエラーを識別します。
  • 次のディレクトリーに結果を収集します。
    • tachyon_insp_xe\vc10\My Inspector Results - find_and_fix_threading_errors\ ディレクトリー (Visual Studio* IDE)
    • Inspector\Projects\threading\ ディレクトリー (インテル® Inspector スタンドアロン GUI)
  • 結果をファイナライズします。

解析中、インテル® Inspector は次のような [Collection Log] ウィンドウを表示します。

[Collection Log] ウィンドウ

1 結果の名前がタブに表示されます。この例では、結果の名前は r000ti2 です。結果の名前は、次の規則に沿って付けられます。
  • r = 定数
  • 000 = 次に利用可能な番号
  • ti = スレッドエラー解析タイプ
  • 2 = 中程度の範囲の事前定義済み解析タイプ


インテル® Inspector は、[ソリューション エクスプローラー] (Visual Studio* IDE) と [Project Navigator] (スタンドアロン GUI) で結果へのポインターも提供します。

2 [Collection Log] ペインは、解析の進行状況と成果を示します。

[Summary] ボタンをクリックして、解析 (収集とファイナライズ) が完了する前に結果の管理を開始できますが、このチュートリアルではその方法について取り上げません。


このチュートリアルでは、インテル® Inspector スタンドアロン GUI から解析を実行する方法を説明します。インテル® Inspector コマンドライン・インターフェイス (inspxe-cl コマンド) を使用して解析を実行することもできます。

解析が完了すると、[Summary] ウィンドウが自動的に表示されます。

目次に戻る


問題の選択

検出されたスレッドエラーの調査を開始します。

主要な用語を理解する

code location (コード位置): 「書き込み」コード位置など、インテル® Inspector が観測したソースコードの場所。以前は observation (観測位置) と呼ばれていました。

problem (問題): 初期化されていないメモリーアクセスなど、1 回または複数回検出された問題。問題が複数回検出された場合、コールスタックは同じですが、スレッドやタイムスタンプは異なります。問題とそれぞれの検出に関する情報を確認できます。

problem set (問題セット): アプリケーション実行中のオブジェクトの割り当て解除が早すぎることに起因する問題セットなど、解決策が共通している可能性がある、共通の問題タイプと共有コード位置を持つ問題のグループ。問題セットは、解析が完了した後にのみ表示されます。

その他の主要な用語については、「インテル® Inspector の用語集」 (https://software.intel.com/en-us/articles/intel-inspector-glossary) を参照してください。

[Summary] ウィンドウ内の各種ペインを理解する

解析が完了すると、次のような [Summary] ウィンドウが自動的に表示されます。

[Summary] ウィンドウ

1 [Summary] ウィンドウから結果データの管理を開始します。問題は問題セットにグループ化され、重要度とサイズで優先順位付けされます。

2

[Problems] ペインは、「To Do」リストと考えることができます。最上部から開始し、下へ進みます。展開コントロール アイコンをクリックして、問題セットに含まれる問題を確認します。

3

[Code Locations] ペインは、[Problems] ペインで選択した問題が検出されたすべてのコード位置について、コード位置の概要、周囲のソースコード、およびコールスタック情報を表示します。

スライダーの各種コントロールを使用して、選択した問題の異なる検出の情報を確認します。

問題を選択する

確認が終わったら、次の操作を行います。

  1. find_and_fix_threading_errors.cpp ソースファイルの [Data race] 問題セットの横にある 展開コントロール アイコンをクリックして、問題セットに含まれるすべての問題を確認します。
  2. 問題セット内の最初の [Data race] 問題のデータ行をダブルクリックして、[Sources] ウィンドウでエラーの原因に関する詳細を確認します。

目次に戻る


結果データの解釈

検出されたスレッドエラーの原因を特定します。

[Sources] ウィンドウ内の各種タブを理解する

問題セット内の最初の [Data race] 問題のデータ行をダブルクリックすると、次のような [Sources] ウィンドウが表示され、エラーの原因に関する詳細な情報を確認できます。

[Sources] ウィンドウ

1 ソースタブは、[Data race] 問題のコード位置を含むソースコード・ファイル全体を表示します (サンプルは非決定的であるため、メモリー書き込みまたはメモリー読み取りのコード位置が表示されます)。
2 [Disassembly] タブは、[Data race] 問題のコード位置に対応するアセンブリー命令を表示します。
3 ソースタブは、[Data race] 問題のコード位置に対応する完全なコールスタックを表示します。
4 この領域は、[Data race] 問題の別のコード位置のソース、逆アセンブリー、コールスタック情報を表示します (サンプルは非決定的であるため、メモリー書き込みまたはメモリー読み取りのコード位置が表示されます)。

展開コントロール/折りたたみコントロール アイコンを使用して、[Data race] 問題の各コード位置のソース、逆アセンブリー、コールスタック情報を展開/折りたたみます。

問題の解釈と解決に関する詳細情報にアクセスする

  1. ソースタブまたは [Disassembly] タブ内の任意の場所を右クリックします。
  2. [Explain Problem] を選択して、[Data race] 問題タイプに関するインテル® Inspector のヘルプを表示します。

目次に戻る


問題の解決

検出されたスレッドエラーを修正します。

問題を調査する

find_and_fix_threading_errors.cpp サンプルファイルに埋め込まれているコメントから、データ競合の原因は、複数のスレッドが同時にグローバル変数 col にアクセスしているためだと分かります。この問題を修正する 1 つの方法は、グローバル変数をローカル変数に変更することです。

エディターにアクセスする

ソースタブでコードの 80 行目付近にスクロールして color col; 行をダブルクリックし、エディターで find_and_fix_threading_errors.cpp ソースファイルを開きます。

ソースコードを変更する

  1. color col; をコメントアウトして、88 行目付近の //color col; のコメントを外し、変数 col を関数 render_one_pixel のローカル変数にします。
  2. 編集内容を保存します。
  3. 結果タブをクリックして [Sources] ウィンドウに戻ります。


    [Sources] ウィンドウのデータは、解析時のソースコードであるため、変更内容は反映されません。

  4. [Summary] ボタンをクリックして [Summary] ウィンドウを再度表示します。

目次に戻る


リビルドと解析の再実行

ソースコードの変更により [Data race] 問題が修正されたかどうか確認します。

アプリケーションをリビルドする

Visual Studio* IDE を使用する場合:

  1. [ビルド] > [ソリューションのクリーン] を選択します。
  2. [ビルド] > [ソリューションのリビルド] を選択します。

インテル® Inspector スタンドアロン GUI を使用する場合:

  1. 以前に開いたコマンド プロンプト・ウィンドウで、ディレクトリーを tachyon_insp_xe\ に変更します。
  2. 次のコマンドを実行します。
    devenv vc10\tachyon_insp_xe.sln /Clean
  3. 次のコマンドを実行します。
    devenv vc10\tachyon_insp_xe.sln /Build

解析を再度実行する

同じ解析タイプの別の解析を実行します。

  • Visual Studio* のメニューから、[ツール] > [Intel Inspector version] > [Threading Error Analysis / Detect Deadlocks and Data Races] を選択します。
  • インテル® Inspector スタンドアロン GUI のメニューから、[File] > [Threading Error Analysis / Detect Deadlocks and Data Races] を選択します。

アプリケーションの出力が適切に表示されるようになります。

解析 (収集とファイナライズの両方) が完了すると、[Summary] ウィンドウが自動的に表示されます。

[Summary] ウィンドウ

次のことに気付くでしょう。

  • 新しい結果タブ「r002ti2」が作成されます。
  • find_and_find_threading_errors.cpp ソースファイルで [Data race] 問題が検出されなくなりました。

目次に戻る


まとめ

このチュートリアルでは、最終的に独自のアプリケーションに適用可能なエンドツーエンドのワークフローを示しました。

ステップ チュートリアルの内容 要点
1. 設定 Visual Studio* IDE の場合: プロジェクトを選択して、プロジェクトが最も正確で完全な解析結果を生成するように設定されていることを確認し、アプリケーションをビルドしてインテル® Inspector の外部で実行されることを確認します。

スタンドアロン GUI の場合: 最適なコンパイラー/リンカー設定でアプリケーションをビルドして、インテル® Inspector の外部で実行されることを確認し、インテル® Inspector 環境を設定して、解析結果を保持するプロジェクトを作成します。

次のオプションでデバッグモードでコンパイル/リンクされたアプリケーションは、最も正確で完全な結果を生成します: /Zi または /ZI/MD または /MDd/Od を指定し、/RTC を指定しない。
2. 結果の収集 解析タイプを選択して解析を実行します。解析中、インテル® Inspector は次の処理を行います。
  • アプリケーションを実行して、対応が必要なエラーを識別し、結果を収集して結果タブに表示します。
  • [ソリューション エクスプローラー] (Visual Studio* IDE) と [Project Navigator] (スタンドアロン GUI) に結果へのポインターを追加します。
  • インテル® Inspector には、解析の範囲とコストの制御を支援するため、事前定義済みのさまざまな解析タイプが用意されています。解析の範囲を広くすると、システムの負荷、および解析の実行に必要な時間とリソースが増えます。
  • [ツール] メニュー (Visual Studio* IDE)、[File] メニュー (インテル® Inspector スタンドアロン GUI)、ツールバー、またはコマンドライン (inspxe-cl コマンドを使用) からエラー解析を実行します。
3. 結果の調査 検出された問題を調査し、結果データを解釈して、インテル® Inspector からエディターに直接アクセスしてソースコードを変更します。
  • 主要な用語: 「code location (コード位置)」は、インテル® Inspector が観測したソースコードの場所。「problem (問題)」は、1 回または複数回検出された問題。「problem set (問題セット)」は、解決策が共通している可能性がある、共通の問題タイプと共有コード位置を持つ問題のグループ。
  • [Summary] ウィンドウの [Problems] ペインを「To Do」リストと考えて、最上部から開始して下へ進みます。
  • [Summary] ウィンドウでコード位置または問題をダブルクリックして [Sources] ウィンドウに移動します。[Sources] ウィンドウの [Summary] ボタンをクリックして [Summary] ウィンドウに戻ります。
  • [Summary] ウィンドウまたは [Sources] ウィンドウ内を右クリックしてコンテキスト・メニューを表示し、[Explain Problem] を選択して問題の解釈と解決に関する詳細情報にアクセスします。
  • [Sources] ウィンドウでコード位置をダブルクリックしてエディターを開きます。
4. 作業の確認 アプリケーションをリビルド/再リンクして、再度調査します。  

次のステップ: 解析用に独自のアプリケーションを準備して、インテル® Inspector でエラーを見つけて修正します。

目次に戻る


法務上の注意書き

本資料は、明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず、いかなる知的財産権のライセンスも許諾するものではありません。

インテル® テクノロジーの機能と利点はシステム構成によって異なり、対応するハードウェアやソフトウェア、またはサービスの有効化が必要となる場合があります。実際の性能はシステム構成によって異なります。絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。詳細については、各システムメーカーまたは販売店にお問い合わせいただくか、http://www.intel.co.jp/ を参照してください。

インテルは、明示されているか否かにかかわらず、いかなる保証もいたしません。ここにいう保証には、商品適格性、特定目的への適合性、および非侵害性の黙示の保証、ならびに履行の過程、取引の過程、または取引での使用から生じるあらゆる保証を含みますが、これらに限定されるわけではありません。

本資料には、開発中の製品、サービスおよびプロセスについての情報が含まれています。本資料に含まれる情報は予告なく変更されることがあります。最新の予測、スケジュール、仕様、ロードマップについては、インテルの担当者までお問い合わせください。

本資料で説明されている製品およびサービスには、設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。

Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation またはその子会社の商標です。

* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

Microsoft および Windows は、米国 Microsoft Corporation の、米国およびその他の国における登録商標または商標です。

© Intel Corporation.

本ソフトウェアおよび関連ドキュメントは、インテルが著作権を有する著作物であり、その使用には付随する明示的なライセンス (「ライセンス」) が適用されます。ライセンスに明記されている場合を除き、インテルから事前に書面による許可なしに、ソフトウェアまたは関連ドキュメントを使用、改変、複製、公開、配布、開示、転送してはなりません。

本ソフトウェアおよび関連ドキュメントは現状のまま提供され、ライセンスに明記されている場合を除き、明示されているか否かにかかわらず、いかなる保証もいたしません。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

タイトルとURLをコピーしました