Depurar código de GPUDebugging GPU Code

Puede depurar el código de C++ que se está ejecutando en la unidad central de gráficos (GPU).You can debug C++ code that is running on the graphics processing unit (GPU). La compatibilidad con la depuración de GPU en Visual Studio incluye la detección de carrera, el inicio de procesos y su asociación y la integración en las ventanas de depuración.GPU debugging support in Visual Studio includes race detection, launching processes and attaching to them, and integration into the debugging windows.

Plataformas compatiblesSupported Platforms

La depuración se admite en Windows 7Windows 7, Windows 8Windows 8, Windows Server 2008 R2Windows Server 2008 R2, y Windows 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. Para depurar en el emulador de software, se requiere Windows 8Windows 8 o Windows Server 2012Windows Server 2012.For debugging on the software emulator, Windows 8Windows 8, or Windows Server 2012Windows Server 2012 is required. Para depurar en el hardware, debe instalar los controladores de su tarjeta gráfica.For debugging on the hardware, you must install the drivers for your graphics card. No todos los proveedores de hardware implementan todas las características del depurador.Not all hardware vendors implement all debugger features. Vea la documentación del proveedor para conocer las limitaciones.See the vendor documentation for limitations.

Note

Los proveedores de hardware independientes que deseen admitir la depuración de GPU en Visual Studio deben crear un archivo DLL que implemente la interfaz VSD3DDebug y esté diseñado para sus propios controladores.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.

Configurar la depuración de GPUConfiguring GPU Debugging

El depurador no puede interrumpir el código de CPU y el código de GPU en la misma ejecución de la aplicación.The debugger cannot break on both CPU code and GPU code in the same app execution. De forma predeterminada, el depurador interrumpe el código de CPU.By default, the debugger breaks on CPU code. Para depurar el código de GPU, siga uno de estos dos pasos:To debug GPU code, use one of these two steps:

  • En el depurar tipo lista el estándar barra de herramientas, elija solo GPU.In the Debug Type list on the Standard toolbar, choose GPU Only.

  • En el Explorador de soluciones, en el menú contextual del proyecto, elija propiedades.In Solution Explorer, on the shortcut menu for the project, choose Properties. En el páginas de propiedades cuadro de diálogo, seleccione depuracióny, a continuación, seleccione solo GPU en el tipo de depurador lista.In the Property Pages dialog box, select Debugging, and then select GPU Only in the Debugger Type list.

Iniciar y asociar a aplicacionesLaunching and Attaching to Applications

Puede utilizar los comandos de depuración de Visual Studio para iniciar y detener la depuración de GPU.You can use the Visual Studio debugging commands to start and stop GPU debugging. Vea Desplazarse por el código con el depurador para obtener más información.For more information, see Navigating through Code with the Debugger. También puede asociar el depurador de GPU a un proceso en ejecución, pero únicamente si dicho proceso ejecuta código de GPU.You can also attach the GPU debugger to a running process, but only if that process executes GPU code. Para obtener más información, consulte adjuntar a procesos en ejecución.For more information, see Attach to Running Processes.

Ejecutar Tile actual hasta el cursor y Ejecutar hasta el cursorRun Current Tile to Cursor and Run to Cursor

Al depurar en la GPU, tiene dos opciones para ejecutar hasta la ubicación del cursor.When you are debugging on the GPU, you have two options for running to the cursor location. Los comandos de ambas opciones están disponibles en el menú contextual del editor de código.The commands for both options are available on the shortcut menu of the code editor.

  1. El ejecutar hasta el Cursor comando ejecuta la aplicación hasta que llegue a la ubicación del cursor y, a continuación, se interrumpe.The Run to Cursor command runs your app until it reaches the cursor location and then breaks. Esto no implica que el subproceso actual se ejecute hasta el cursor; más bien significa que el primer subproceso que alcanza la ubicación del cursor desencadena la interrupción.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. Consulte desplazarse por el código con el depuradorSee Navigating through Code with the Debugger

  2. El ejecutar Tile actual hasta el Cursor comando ejecuta la aplicación hasta que todos los subprocesos del mosaico actual de alcanzan el cursor y, a continuación, los saltos.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.

Ventanas de depuraciónDebugging Windows

Mediante determinadas ventanas de depuración, puede examinar, marcar e inmovilizar subprocesos de GPU.By using certain debugging windows, you can examine, flag, and freeze GPU threads. Para obtener más información, consulte:For more information, see:

Excepciones de la sincronización de datosData Synchronization Exceptions

El depurador puede identificar varias condiciones de sincronización de datos durante la ejecución.The debugger can identify several data synchronization conditions during execution. Cuando se detecta una condición, el depurador entra en el estado de interrupción.When a condition is detected, the debugger enters the break state. Tiene dos opciones:interrumpir o continuar.You have two options—Break or Continue. Mediante el uso de la excepciones cuadro de diálogo, puede configurar si el depurador detectará estas condiciones y también qué condiciones se interrumpirá.By using the Exceptions dialog box, you can configure whether the debugger detects these conditions and also which conditions it will break for. Para obtener más información, consulte administrar excepciones con el depurador.For more information, see Managing Exceptions with the Debugger. También puede usar el opciones cuadro de diálogo para especificar que el depurador omita las excepciones si los datos que se escriben no cambian el valor de los datos.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. Para obtener más información, consulte General, depuración, cuadro de diálogo Opciones.For more information, see General, Debugging, Options Dialog Box.

Solución de problemasTroubleshooting

Especificar un aceleradorSpecifying an accelerator

Puntos de interrupción en código de GPU solo se producen si el código se ejecuta en el direct3d_ref acelerador (REF).Breakpoints in GPU code are only hit if the code is running on the accelerator::direct3d_ref (REF) accelerator. Si no especifica un acelerador en el código, el Acelerador REF se selecciona automáticamente como el tipo de Acelerador de depuración en las propiedades del proyecto.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. Si el código selecciona explícitamente un acelerador, el acelerador REF no se usará durante la depuración y los puntos de interrupción no se visitarán a menos que el hardware de GPU sea compatible con la depuración.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. Puede resolverlo escribiendo código para que utilice el acelerador REF durante la depuración.You can remedy this by writing your code so that it uses the REF accelerator during debugging. Para obtener más información, vea las propiedades del proyecto y mediante objetos accelerator y accelerator_view y configuración del proyecto para una configuración de depuración de C++.For more information, see project properties and Using accelerator and accelerator_view Objects and Project Settings for a C++ Debug Configuration.

Puntos de interrupción condicionalesConditional Breakpoints

Se admiten puntos de interrupción condicionales en el código de GPU, pero no todas las expresiones se pueden evaluar en el dispositivo.Conditional breakpoints in GPU code are supported, but not every expression can be evaluated on the device. Cuando una expresión no se puede evaluar en el dispositivo, se evalúa en el depurador.When an expression can't be evaluated on the device, it is evaluated on the debugger. Es probable que el depurador se ejecute más despacio que el dispositivo.The debugger is likely to run more slowly than the device.

Error: problema de configuración con el tipo de acelerador de depuración seleccionado.Error: There is a configuration issue with the selected Debugging Accelerator Type.

Este error se produce cuando existe una incoherencia entre la configuración del proyecto y la configuración del equipo en el que está depurando.This error happens when there is an inconsistency between the project settings and the configuration of the PC that you are debugging on. Para obtener más información, consulte configuración del proyecto para una configuración de depuración de C++.For more information, see Project Settings for a C++ Debug Configuration.

Error: el controlador de depuración del tipo de acelerador de depuración seleccionado no está instalado en la máquina de destino.Error: The debug driver for the selected Debugging Accelerator Type is not installed on the target machine.

Este error se produce si está depurando en un equipo remoto.This error happens if you are debugging on a remote PC. El depurador no puede determinar si los controladores están instalados en el equipo remoto hasta el momento de la ejecución.The debugger cannot determine until run time whether the drivers are installed on the remote PC. Los controladores los suministra el fabricante de la tarjeta gráfica.The drivers are available from the manufacturer of the graphics card.

Error: la función de detección del tiempo de espera y recuperación (TDR) debe estar deshabilitada en el sitio remoto.Error: Timeout Detection and Recovery (TDR) must be disabled at the remote site.

Es posible que para los cálculos de C++ AMP se supere el intervalo de tiempo predeterminado establecido por la detección de tiempo de espera de Windows y el proceso de recuperación (TDR).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). Cuando ocurre esto, se cancela el cálculo y se pierden los datos.When that happens, the computation is canceled and the data is lost. Para obtener más información, consulte control de los TdR en C++ AMP.For more information, see Handling TDRs in C++ AMP.

Vea tambiénSee Also

Tutorial: Depurar una aplicación C++ AMP Walkthrough: Debugging a C++ AMP Application
Configuración del proyecto para una configuración de depuración de C++ Project Settings for a C++ Debug Configuration
Iniciar la depuración de GPU en Visual StudioStart GPU Debugging in Visual Studio