You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遇DXGI_ERROR_DEVICE_HUNG崩溃,移除三类操作可消除问题

DXGI_ERROR_DEVICE_HUNG 崩溃排查方案

已知触发条件:当同时执行以下三类操作时会触发DXGI_ERROR_DEVICE_HUNG崩溃,移除任意一项即可恢复正常:

  • DirectML任务
  • 目标为回读缓冲区、源为DirectML任务输出下游资源的ID3D12GraphicsCommandList::CopyResource操作
  • 从映射的回读缓冲区复制数据至vector的操作

已完成排查:同步机制无问题,已停止渲染任务帧缓冲确保回读缓冲区无并发读写;取消回读缓冲区持久化映射,改为每次读取调用Map;无调试信息及有效DRED诊断数据。

针对该问题,可从以下方向进一步排查:


1. 资源状态转换与队列同步检查

  • 确认DirectML任务执行完毕后,其输出资源的状态是否正确转换为D3D12_RESOURCE_STATE_COPY_SOURCE;CopyResource完成后,回读缓冲区状态是否切换为D3D12_RESOURCE_STATE_READBACK。DirectML可能会隐式修改资源状态,手动显式设置状态转换可能引发冲突。
  • 在DirectML执行队列与CopyResource所在队列之间添加显式的ID3D12Fence同步,部分硬件对跨队列依赖存在隐性要求,即使你认为同步逻辑无误,也可尝试验证。

2. 回读缓冲区配置验证

  • 确认回读缓冲区创建参数:必须使用D3D12_HEAP_TYPE_READBACK,绑定标志为D3D12_RESOURCE_FLAG_NONE,且格式与DirectML输出资源完全匹配。格式不兼容可能导致CopyResource触发硬件未定义行为。
  • 尝试缩小回读缓冲区尺寸,或拆分数据为小批量复制,排查是否为大尺寸数据复制引发的硬件挂起。

3. DirectML输出资源生命周期隔离

  • 检查DirectML输出的下游资源是否在CopyResource完成前被其他操作(如残留的视图引用、缓存的命令列表)占用,即使已停止渲染帧缓冲,也需确认无隐式资源引用。
  • 新增临时中间资源(非回读类型),先将DirectML输出复制到中间资源,再从中间资源执行CopyResource到回读缓冲区,隔离DirectML与回读缓冲区的直接交互,验证是否可避免崩溃。

4. 驱动与DirectML版本兼容性排查

  • 更新显卡驱动至最新稳定版,DXGI_ERROR_DEVICE_HUNG常与硬件驱动的DirectML兼容性问题相关。
  • 切换DirectML版本(如从预览版换为稳定版),或禁用DirectML优化选项(例如DML_EXECUTION_FLAGS_DISABLE_META_COMMAND_CACHING),排查是否为特定版本的优化逻辑导致问题。

5. 底层调试工具启用

  • 创建D3D12设备时添加D3D12_CREATE_DEVICE_FLAG_DEBUG标志,启用DXGI_DEBUG_LAYER,仔细检查是否有遗漏的底层警告输出。
  • 使用Windows Performance Recorder (WPR)捕获GPU事件,分析崩溃时的GPU指令流,定位具体硬件指令异常。

内容的提问来源于stack exchange,提问作者Tom Huntington

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 08:42:12