可以调试在图形处理单元(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 代码,请使用以下两个步骤之一:
在“标准”工具栏上的“调试类型”列表中,选择“仅限 GPU”。
在 解决方案资源管理器中,在项目的快捷菜单上,选择 “属性”。 在“属性页”对话框中,选择“调试”,然后在“调试器类型”列表中选择“仅 GPU”。
启动并连接到应用程序
可以使用 Visual Studio 调试命令启动和停止 GPU 调试。 有关详细信息,请参阅 使用调试器浏览代码。 还可以将 GPU 调试器附加到正在运行的进程,但前提是该进程执行 GPU 代码。 有关详细信息,请参阅 “附加到正在运行的进程”。
将当前磁贴运行到游标并运行到游标
在 GPU 上进行调试时,有两个选项可以用来运行到光标位置。 这两个选项的命令在代码编辑器的快捷菜单上可用。
“运行到游标”命令将运行应用,直到它到达游标位置,然后中断。 这并不表示当前线程运行到游标;而是意味着到达游标点的第一个线程会触发中断。 请参阅 使用调试器浏览代码
“ 运行当前磁贴到游标” 命令将运行应用,直到当前磁贴中的所有线程到达光标,然后中断。
调试 Windows
通过使用某些调试窗口,可以检查、标记和冻结 GPU 线程。 有关详细信息,请参见:
数据同步异常
调试器可以在执行过程中识别多个数据同步条件。 检测到某个条件时,调试器将进入中断状态。 有两个选项- 中断 或 继续。 通过使用“异常”对话框,可以配置调试器是否检测这些条件,以及在何种条件下它会中断。 有关详细信息,请参阅 使用调试器管理异常。 还可以使用 “选项 ”对话框指定,如果写入的数据不会更改数据的值,调试器应忽略异常。 有关详细信息,请参阅 “常规”、“调试”、“选项”对话框。
Troubleshooting
指定加速器
只有当代码在 accelerator::direct3d_ref(REF)accelerator 上运行时,GPU 代码中的断点才会被触发。 如果未在代码中指定加速键,则 REF 加速器会自动选择为项目属性中的 调试加速器类型 。 如果您的代码显式选择了一个加速器,那么除非您的 GPU 硬件支持调试,否则在调试时 REF 加速器将不会被使用,断点也不会被触发。 可以通过编写代码来解决此问题,以便在调试期间使用 REF 加速器。 有关详细信息,请参阅项目属性、使用accelerator和accelerator_view对象以及C++调试配置的项目设置。
条件断点
GPU 代码中的条件断点受支持,但不能在设备上计算每个表达式。 当无法在设备上计算表达式时,它会在调试器上计算。 调试器运行速度可能比设备慢。
错误:所选调试加速器类型存在配置问题。
当项目设置与正在调试的电脑的配置不一致时,会发生此错误。 有关详细信息,请参阅 C++调试配置的项目设置。
错误:所选调试加速器类型的调试驱动程序未安装在目标计算机上。
如果在远程电脑上进行调试,则会发生此错误。 调试器在运行时无法确定远程电脑上是否安装了驱动程序。 驱动程序可从图形卡制造商获取。
错误:必须在远程站点禁用超时检测和恢复(TDR)。
C++ AMP 计算可以超过 Windows 超时检测和恢复过程(TDR)设置的默认时间间隔。 发生这种情况时,将取消计算并丢失数据。 有关详细信息,请参阅 在 C++ AMP 中处理 TDR。