Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede depurar código de C++ que se ejecuta en la unidad de procesamiento de gráficos (GPU). La compatibilidad con la depuración de GPU en Visual Studio incluye detección de carreras, inicio de procesos y asociación a ellos e integración en las ventanas de depuración.
Plataformas compatibles
La depuración se admite en Windows 7, Windows 8, Windows 10, Windows 11, Windows Server 2008 R2, Windows Server 2012 y Windows Server 2016. Para la depuración en el emulador de software, se requiere Windows 8, Windows 10, Windows 11 o Windows Server 2012, Windows Server 2016. Para la depuración del hardware, debe instalar los controladores de la tarjeta gráfica. No todos los proveedores de hardware implementan todas las funciones del depurador. Consulte la documentación del proveedor para ver las limitaciones.
Nota:
Los proveedores de hardware independientes que quieran admitir la depuración de GPU en Visual Studio deben crear un archivo DLL que implemente la interfaz VSD3DDebug y tenga como destino sus propios controladores.
Configuración de la depuración de GPU
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. De forma predeterminada, el depurador se interrumpe en el código de CPU. Para depurar código de GPU, siga uno de estos dos pasos:
En la lista Tipo de depuración de la barra de herramientas Estándar , elija Solo GPU.
En el Explorador de soluciones, en el menú contextual del proyecto, elija Propiedades. En el cuadro de diálogo Páginas de propiedades , seleccione Depuración y, a continuación, seleccione Solo GPU en la lista Tipo del depurador .
Inicio y asociación a aplicaciones
Puede usar los comandos de depuración de Visual Studio para iniciar y detener la depuración de GPU. Para obtener más información, vea Navegar por el código con el depurador. También puede adjuntar el depurador de GPU a un proceso en ejecución, pero solo si ese proceso ejecuta código de GPU. Para obtener más información, vea Asociar a procesos en ejecución.
Ejecutar icono actual en cursor y ejecutar hasta el cursor
Al depurar en la GPU, tiene dos opciones para ejecutar hasta la posición del cursor. Los comandos de ambas opciones están disponibles en el menú contextual del editor de código.
El comando Ejecutar hasta el cursor ejecuta la aplicación hasta que llega a la ubicación del cursor y, a continuación, se interrumpe. Esto no implica que el subproceso actual se ejecute en el cursor; en su lugar, significa que el primer subproceso que alcanza el punto de cursor desencadena la interrupción. Ver Navegación por el código con el depurador.
El comando Ejecutar icono actual en cursor ejecuta la aplicación hasta que todos los subprocesos del icono actual llegan al cursor y, a continuación, se interrumpen.
Depuración de Windows
Usando ciertas ventanas de depuración, puede examinar, marcar e inmovilizar subprocesos de GPU. Para obtener más información, consulte:
Excepciones de sincronización de datos
El depurador puede identificar varias condiciones de sincronización de datos durante la ejecución. Cuando se detecta una condición, el depurador entra en el estado de pausa. Tiene dos opciones: Interrumpir o Continuar. Mediante el cuadro de diálogo Excepciones, puede configurar si el depurador detecta estas condiciones y también para qué condiciones se detendrá. Para obtener más información, consulte Gestión de excepciones con el depurador. También puede usar el cuadro de diálogo Opciones para especificar que el depurador debe omitir excepciones si los datos escritos no cambian el valor de los datos. Para obtener más información, vea General, Debugging, Options Dialog Box.
Solución de problemas
Especificación de un acelerador
Los puntos de interrupción en el código de GPU solo se alcanzan si el código se ejecuta en el acelerador::direct3d_ref (REF). Si no especifica un acelerador en el código, el acelerador REF se selecciona automáticamente como Debugging Accelerator Type en las propiedades del proyecto. 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 alcanzarán a menos que el hardware de GPU tenga compatibilidad con la depuración. Para solucionarlo, escriba el código para que use el acelerador REF durante la depuración. Para obtener más información, vea Propiedades del proyecto y Uso de los objetos acelerador y accelerator_view y Configuración de un proyecto para la depuración de C++.
Puntos de interrupción condicionales
Se admiten puntos de interrupción condicionales en el código de GPU, pero no todas las expresiones se pueden evaluar en el dispositivo. Cuando una expresión no se puede evaluar en el dispositivo, se evalúa en el depurador. Es probable que el depurador se ejecute más lentamente que el dispositivo.
Error: hay un problema de configuración con el tipo de acelerador de depuración seleccionado.
Este error se produce cuando hay una incoherencia entre la configuración del proyecto y la configuración del equipo en el que se está realizando la depuración. Para obtener más información, vea Configuración del proyecto para entornos de depuración de C++.
Error: el controlador de depuración del tipo de acelerador de depuración seleccionado no está instalado en la máquina de destino.
Este error se produce si está depurando en un equipo remoto. El depurador no puede determinar en el momento de la ejecución si los controladores están instalados en el PC remoto. Los controladores están disponibles en el fabricante de la tarjeta gráfica.
Error: La detección de tiempo de espera y la recuperación (TDR) deben estar deshabilitadas en el sitio remoto.
Es posible que los cálculos de C++ AMP superen el intervalo de tiempo predeterminado establecido por el proceso de recuperación y detección de tiempo de espera de Windows (TDR). Cuando esto sucede, se cancela el cálculo y se pierden los datos. Para obtener más información, vea Control de TDR en C++ AMP.