スレッド化モデルを使用したアプリケーションのマルチスレッド化エラーをデバッグすることができます。(またはデッドロックが発生する可能性のある条件)、スレッドストールなどを自動的に検出します。スレッド化アプリケーションのデバッグに関連する固有の問題についても説明します。プラットフォーム向けにマルチスレッド・アプリケーションを効率的に開発するための手法について説明します。マルチプラットフォーム共有メモリー並列プログラミングをサポートしています。移植性とスケーラビリティーに優れたモデルで、デスクトップ・マシンからスーパーコンピューターまで、さまざまなプラットフォーム用の並列アプリケーションを開発するため、単純で柔軟性のあるインターフェイスを共有メモリー並列処理を行う開発者に提供します。デバッガーによってランタイム時のパフォーマンスが左右され、競合状態が表面化しないことがあるため、マルチスレッド・アプリケーションのデバッグは非常に複雑です。文でさえも、問題を発見しにくくすることがあります。文が、同期およびオペレーティング・システム関数を使用するためです。利用することでさらに複雑になります。サポートする専用のデバッガーなしでは、検証しステップ実行することはできません。この単純な例でもデータ競合状態が発生します。step;ループに注目してください。この例では「ワークシェアリング」が使用されています。スレッド間で作業を分配することをワークシェアリングと呼びます。以上のスレッドで正確に一度だけ並列に実行されます。作成するスレッドの数と、スレッドの作成、同期、および破棄方法を決定します。つの反復が異なる反復に対してデータ依存しているため、スレッド化は失敗します。このような状態を競合状態と呼びます。並列実行を使用した場合にのみ発生します。この問題に対処するには、同期を使用してデータ競合状態を防ぎます。インスタンスによっては、変数が偶然「競合状態に勝って」プログラムが正しく機能することがあるため、競合状態の検出は困難です。プログラムが一度動作しても常に動作するとは限りません。ハイパースレッディング・テクノロジーをサポートするマシンや複数の物理プロセッサーを搭載しているマシンなど、さまざまなマシン上でプログラムをテストすると良いでしょう。このような場合にも役立ちます。つのスレッドが競合を停止してもその間、他のスレッドは継続的かつ著しくランタイム動作を変更するため、競合状態の検出には役立ちません。マルチスレッド・アプリケーションのデバッグを効率的に行うことができます。非常に有益な並列実行情報とデバッグのヒントを提供します。API、およびすべてのメモリーアクセスをモニターします。テスト中に発生しない可能性のある稀なエラーの検出に役立ちます。ツールを使用するときは、データ収集プロセスを高速化するため、最小限のメモリーですべてのコードパスにアクセスすることが重要です。通常、アプリケーションで処理するデータ量を減らすためにソースコードやデータセットを少し変更する必要があります。分析を行うには、最適化を無効、デバッグシンボルを有効にしてプログラムをコンパイルする必要があります。プラグインとして動作します。レベルの分析が用意されています。プロジェクトでコンパイルされたアプリケーションを開始します。変更される次のソース行のデータ競合エラーを識別しています。異なるスレッドから読み書きのためにアクセスされていることから、これらのエラーは明白です。メインスレッドのスタックに割り当てられている変数がワーカースレッドからアクセスされたことを示す、「潜在的なプライバシーの侵害」に関する警告を出力しています。関数のコールスタックを含む詳細なエラー情報を表示します。ソースコードのクイック・リファレンスは、エラーが検出されたときのコード範囲の確認に役立ちます。つのソースコード・ウィンドウが表示されています。ダブルクリックしてソースコードに移動することもできます。エラーレポートを取得して根本的な原因が判明したら、開発者は問題の解決方法を考えます。ループのデータ競合状態を回避するための一般的な考慮事項と、検査したコードの問題を解決する方法についてのアドバイスを以下に説明します。共有データとプライベート・データの管理ほぼすべてのループはメモリーを読み書きします。開発者は、どのメモリーをスレッド間で共有し、どのメモリーをプライベートとして保持するのかをコンパイラーに指示する必要があります。メモリーが共有の場合、すべてのスレッドが同じメモリーの場所にアクセスします。ループが終了すると、これらのプライベート・コピーは破棄されます。デフォルトでは、プライベートなループ変数を除き、すべての変数は共有されます。