GPU コードのデバッグDebugging GPU Code

グラフィックス処理装置 (GPU) で実行されている C++ コードをデバッグできます。You can debug C++ code that is running on the graphics processing unit (GPU). Visual Studio での GPU デバッグのサポートには、競合の検出、プロセスの開始、プロセスへのアタッチ、デバッグ ウィンドウへの統合が含まれます。GPU debugging support in Visual Studio includes race detection, launching processes and attaching to them, and integration into the debugging windows.

サポートされているプラットフォームSupported Platforms

デバッグは Windows 7Windows 7Windows 8Windows 8Windows Server 2008 R2Windows Server 2008 R2Windows Server 2012Windows Server 2012 でサポートされています。Debugging is supported on Windows 7Windows 7, Windows 8Windows 8, Windows Server 2008 R2Windows Server 2008 R2, and Windows Server 2012Windows Server 2012. ソフトウェア エミュレーターでデバッグするには、Windows 8Windows 8 または Windows Server 2012Windows Server 2012 が必要です。For debugging on the software emulator, Windows 8Windows 8, or Windows Server 2012Windows Server 2012 is required. ハードウェアでデバッグするには、使用するグラフィックス カードのドライバーをインストールする必要があります。For debugging on the hardware, you must install the drivers for your graphics card. ハードウェア ベンダーによってはデバッガーの一部の機能が実装されていない場合があります。Not all hardware vendors implement all debugger features. 制限については、ベンダーのドキュメントを参照してください。See the vendor documentation for limitations.

Note

Visual Studio での GPU デバッグをサポートする独立系ハードウェア ベンダーは、VSD3DDebug インターフェイスを実装し、独自のドライバーを対象とする DLL を作成する必要があります。Independent hardware vendors who want to support GPU debugging in Visual Studio must create a DLL that implements the VSD3DDebug interface and targets their own drivers.

GPU デバッグの構成Configuring GPU Debugging

デバッガーは同じアプリの実行中に CPU コードと GPU コードの両方で中断することはできません。The debugger cannot break on both CPU code and GPU code in the same app execution. 既定では、デバッガーは CPU コードで中断されます。By default, the debugger breaks on CPU code. GPU コードをデバッグするには、次の 2 つの手順のいずれかを使用します。To debug GPU code, use one of these two steps:

  • [標準] ツール バーの [デバッグの種類] リストで [GPU のみ] を選択します。In the Debug Type list on the Standard toolbar, choose GPU Only.

  • ソリューション エクスプローラーで、プロジェクトのショートカット メニューの [プロパティ] を選びます。In Solution Explorer, on the shortcut menu for the project, choose Properties. [プロパティ ページ] ダイアログ ボックスで [デバッグ] をクリックし、[デバッガーの種類] リストで [GPU のみ] を選択します。In the Property Pages dialog box, select Debugging, and then select GPU Only in the Debugger Type list.

アプリケーションの起動とアプリケーションへのアタッチLaunching and Attaching to Applications

Visual Studio のデバッグ コマンドを使用して GPU デバッグを開始および停止できます。You can use the Visual Studio debugging commands to start and stop GPU debugging. 詳細については、「デバッガーでのコード間の移動」を参照してください。For more information, see Navigating through Code with the Debugger. また、実行中のプロセスに GPU デバッガーをアタッチできます。ただし、そのプロセスが GPU コードを実行している場合に限ります。You can also attach the GPU debugger to a running process, but only if that process executes GPU code. 詳細については、次を参照してください。実行中のプロセスにアタッチします。For more information, see Attach to Running Processes.

[現在の Tile をカーソル行の前まで実行] と [カーソル行の前まで実行]Run Current Tile to Cursor and Run to Cursor

GPU でデバッグするとき、カーソル位置まで実行するには 2 つの選択肢があります。When you are debugging on the GPU, you have two options for running to the cursor location. いずれの選択肢のコマンドもコード エディターのショートカット メニューで使用できます。The commands for both options are available on the shortcut menu of the code editor.

  1. [カーソル行の前まで実行] コマンドは、カーソル位置に達するまでアプリを実行してから中断します。The Run to Cursor command runs your app until it reaches the cursor location and then breaks. これは、現在のスレッドがカーソル位置まで実行されるという意味ではありません。カーソル位置に達した最初のスレッドが中断されるということです。This does not imply that the current thread runs to the cursor; rather, it means that the first thread that reaches the cursor point triggers the break. 参照してくださいデバッガーでコード間の移動See Navigating through Code with the Debugger

  2. [現在の Tile をカーソル行の前まで実行] コマンドは、現在の Tile 内のすべてのスレッドがカーソル位置に達するまでアプリを実行してから中断します。The Run Current Tile to Cursor command runs your app until all of the threads in the current tile reach the cursor and then breaks.

デバッグ ウィンドウDebugging Windows

特定のデバッグ ウィンドウを使用することで、GPU スレッドを調べたり、スレッドにフラグを設定したり、スレッドを凍結したりできます。By using certain debugging windows, you can examine, flag, and freeze GPU threads. 詳細については次を参照してください:For more information, see:

データ同期の例外Data Synchronization Exceptions

デバッガーは実行中に複数のデータ同期条件を検出できます。The debugger can identify several data synchronization conditions during execution. 条件を検出すると、デバッガーは中断状態になります。When a condition is detected, the debugger enters the break state. [中断] または [続行] の 2 つの選択肢があります。You have two options—Break or Continue. [例外] ダイアログ ボックスを使用して、デバッガーがこれらの条件を検出するかどうか、どの条件で実行を中断するかを構成できます。By using the Exceptions dialog box, you can configure whether the debugger detects these conditions and also which conditions it will break for. 詳細については、次を参照してください。デバッガーでの例外を管理するします。For more information, see Managing Exceptions with the Debugger. また、[オプション] ダイアログ ボックスを使用して、データが書き込まれてもデータの値が変更されない場合にデバッガーが例外を無視するように指定できます。You can also use the Options dialog box to specify that the debugger should ignore exceptions if the data that's written doesn't change the value of the data. 詳細については、次を参照してください。 [全般]、デバッグ、オプションダイアログ ボックスです。For more information, see General, Debugging, Options Dialog Box.

トラブルシューティングTroubleshooting

アクセラレータの指定Specifying an accelerator

GPU コード内のブレークポイントがヒットするのは、コードが accelerator::direct3d_ref (REF) アクセラレータで実行されている場合のみです。Breakpoints in GPU code are only hit if the code is running on the accelerator::direct3d_ref (REF) accelerator. コード内でアクセラレータを指定していない場合は、REF アクセラレータがプロジェクトのプロパティの [デバッグ アクセラレータの種類] で自動的に選択されます。If you do not specify an accelerator in your code, the REF accelerator is automatically selected as the Debugging Accelerator Type in the project properties. コード内でアクセラレータを明示的に選択している場合、REF アクセラレータはデバッグ中に使用されません。GPU ハードウェアがデバッグをサポートしていない限り、ブレークポイントがヒットすることはありません。If your code explicitly selects an accelerator, then the REF accelerator will not be used during debugging and the breakpoints will not be hit unless your GPU hardware has debugging support. この問題を解決するには、デバッグ中に REF アクセラレータを使用するようにコードを記述します。You can remedy this by writing your code so that it uses the REF accelerator during debugging. 詳細については、プロジェクトのプロパティを参照してくださいとアクセラレータおよび accelerator_view オブジェクトを使用してのプロジェクト設定、C++デバッグ構成します。For more information, see project properties and Using accelerator and accelerator_view Objects and Project Settings for a C++ Debug Configuration.

条件付きブレークポイントConditional Breakpoints

GPU コード内の条件付きブレークポイントはサポートされていますが、すべての式をデバイス上で評価できるとは限りません。Conditional breakpoints in GPU code are supported, but not every expression can be evaluated on the device. 式はデバイスで評価できないと、デバッガーで評価されます。When an expression can't be evaluated on the device, it is evaluated on the debugger. デバッガーでの処理はデバイスでの処理よりも遅くなる可能性があります。The debugger is likely to run more slowly than the device.

エラー :選択されたデバッグ アクセラレータの種類と構成の問題があります。Error: There is a configuration issue with the selected Debugging Accelerator Type.

プロジェクトの設定とデバッグ中の PC の設定との間に矛盾があると、このエラーが発生します。This error happens when there is an inconsistency between the project settings and the configuration of the PC that you are debugging on. 詳細については、次を参照してください。 C++ デバッグ構成のプロジェクト設定します。For more information, see Project Settings for a C++ Debug Configuration.

エラー :ターゲット コンピューターでは、選択されたデバッグ アクセラレータの種類に対応するデバッグ ドライバーがインストールされていません。Error: The debug driver for the selected Debugging Accelerator Type is not installed on the target machine.

リモート PC でデバッグしている場合に、このエラーが発生します。This error happens if you are debugging on a remote PC. デバッガーは、ドライバーがリモート PC にインストールされているかどうかを実行時まで判別できません。The debugger cannot determine until run time whether the drivers are installed on the remote PC. ドライバーはグラフィックス カードの製造元から入手できます。The drivers are available from the manufacturer of the graphics card.

エラー :リモート サイトでは、タイムアウト検出と復旧 (TDR) を無効にする必要があります。Error: Timeout Detection and Recovery (TDR) must be disabled at the remote site.

Windows のタイムアウト検出と復旧 (TDR) で設定されている既定の時間間隔より、C++ AMP の計算が長くかかっている可能性があります。It is possible for C++ AMP computations to exceed the default time interval that's set by the Windows timeout detection and recovery process (TDR). その場合、計算は取り消され、データは失われます。When that happens, the computation is canceled and the data is lost. 詳細については、「Handling TDRs in C++ AMP」 (C++ AMP での TDR の処理) を参照してください。For more information, see Handling TDRs in C++ AMP.

関連項目See Also