グラフィックス処理装置 (GPU) で実行されている C++ コードをデバッグできます。 Visual Studio での GPU デバッグのサポートには、競合検出、プロセスの起動とアタッチ、デバッグ ウィンドウへの統合が含まれます。
サポートされているプラットフォーム
デバッグは、Windows 7、Windows 8、Windows 10、Windows 11、Windows Server 2008 R2、Windows Server 2012、および Windows Server 2016 でサポートされています。 ソフトウェア エミュレーター、Windows 8、Windows 10、Windows 11、または Windows Server 2012 でのデバッグには、Windows Server 2016 が必要です。 ハードウェアでデバッグするには、グラフィックス カードのドライバーをインストールする必要があります。 すべてのハードウェア ベンダーがすべてのデバッガー機能を実装しているわけではありません。 制限事項については、ベンダーのドキュメントを参照してください。
注
Visual Studio で GPU デバッグをサポートする独立系ハードウェア ベンダーは、VSD3DDebug インターフェイスを実装し、独自のドライバーを対象とする DLL を作成する必要があります。
GPU デバッグの構成
アプリケーションの実行中に、CPU コードと GPU コードの両方でデバッガーを中断することはできません。 既定では、デバッガーは CPU コードで中断します。 GPU コードをデバッグするには、次の 2 つの手順のいずれかを使用します。
[標準] ツール バーの [デバッグの種類] の一覧で、[GPU のみ] を選択します。
ソリューション エクスプローラーのプロジェクトのショートカット メニューで、[プロパティ] を選択します。 [プロパティ ページ] ダイアログ ボックスで、[デバッグ] を選択し、[デバッガーの種類] ボックスの一覧で [GPU のみ] を選択します。
アプリケーションの起動と接続
Visual Studio デバッグ コマンドを使用して、GPU デバッグを開始および停止できます。 詳細については、「 デバッガーを使用したコード間の移動」を参照してください。 実行中のプロセスに GPU デバッガーをアタッチすることもできますが、そのプロセスが GPU コードを実行する場合に限ります。 詳細については、「 実行中のプロセスへのアタッチ」を参照してください。
現在のタイルをカーソルまで実行し、カーソルまで実行する
GPU でデバッグする場合は、カーソル位置に対して 2 つのオプションを実行できます。 両方のオプションのコマンドは、コード エディターのショートカット メニューで使用できます。
カーソルまで実行 コマンドは、アプリをカーソルの場所まで実行してから停止します。 これは、現在のスレッドがカーソルに対して実行されることを意味するものではありません。つまり、カーソル ポイントに到達した最初のスレッドが中断をトリガーします。 デバッガーを使用したコード間の移動に関するページを参照してください
[ 現在のタイルをカーソルに実行 ] コマンドは、現在のタイル内のすべてのスレッドがカーソルに到達してから中断するまでアプリを実行します。
Windows のデバッグ
特定のデバッグ ウィンドウを使用すると、GPU スレッドの調査、フラグ設定、固定を行うことができます。 詳細については、以下を参照してください。
マルチスレッド アプリケーション をデバッグする
データ同期の例外
デバッガーは、実行中にいくつかのデータ同期条件を識別できます。 条件が検出されると、デバッガーは中断状態になります。 [中断] または [続行] の 2 つのオプションがあります。 [例外] ダイアログ ボックスを使用すると、デバッガーがこれらの条件を検出するかどうか、および中断する条件を構成できます。 詳細については、「 デバッガーを使用した例外の管理」を参照してください。 また、[ オプション] ダイアログ ボックスを使用して、書き込まれたデータがデータの値を変更しない場合にデバッガーが例外を無視するように指定することもできます。 詳細については、「 [全般]、[デバッグ]、[オプション] ダイアログ ボックスの順に参照してください。
トラブルシューティング
アクセラレータの指定
GPU コードのブレークポイントは、コードが アクセラレータ::direct3d_ref (REF) アクセラレータで実行されている場合にのみヒットします。 コードでアクセラレータを指定しない場合、REF アクセラレータはプロジェクトのプロパティの デバッグ アクセラレータの種類 として自動的に選択されます。 コードでアクセラレータを明示的に選択した場合、デバッグ中に REF アクセラレータは使用されません。また、GPU ハードウェアでデバッグがサポートされていない限り、ブレークポイントはヒットしません。 これを解決するには、デバッグ中に REF アクセラレータを使用するようにコードを記述します。 詳細については、「C++ デバッグ構成のプロジェクトプロパティ」および「アクセラレータとaccelerator_viewオブジェクトとプロジェクト設定の使用」を参照してください。
条件付きブレークポイント
GPU コードの条件付きブレークポイントはサポートされていますが、すべての式をデバイスで評価できるわけではありません。 デバイスで式を評価できない場合は、デバッガーで評価されます。 デバッガーの実行速度は、デバイスよりも遅くなる可能性があります。
エラー: 選択したデバッグ アクセラレータの種類に構成の問題があります。
このエラーは、プロジェクト設定と、デバッグする PC の構成の間に不整合がある場合に発生します。 詳細については、「 C++ デバッグ構成のプロジェクト設定」を参照してください。
エラー: 選択したデバッグ アクセラレータの種類のデバッグ ドライバーがターゲット コンピューターにインストールされていません。
このエラーは、リモート PC でデバッグしている場合に発生します。 デバッガーは、ドライバーがリモート PC にインストールされているかどうかを実行時まで判断できません。 ドライバーは、グラフィックス カードの製造元から入手できます。
エラー: リモート サイトでタイムアウト検出と回復 (TDR) を無効にする必要があります。
C++ AMP 計算が、Windows タイムアウト検出および回復プロセス (TDR) によって設定された既定の時間間隔を超える可能性があります。 その場合、計算は取り消され、データは失われます。 詳細については、「 C++ AMP での TDR の処理」を参照してください。