如何修复GPU驱动程序崩溃(虚幻引擎错误) 您所在的位置:网站首页 虚幻引擎425有什么用啊 如何修复GPU驱动程序崩溃(虚幻引擎错误)

如何修复GPU驱动程序崩溃(虚幻引擎错误)

2024-07-17 09:17| 来源: 网络整理| 查看: 265

GPU崩溃看起来像什么

在图形密集的项目中工作时,您可能会遇到GPU崩溃。当这种情况发生时,您将看到如下所示的窗口。

它通常是由一个虚幻引擎崩溃报告窗口。

为什么会发生GPU崩溃

Windows已经实现了一种保护措施,以防止应用程序因使用过多内存、进程完成时间过长以及其他各种原因而锁定。在这些情况下,Windows将杀死GPU驱动程序,导致应用程序崩溃。

当您遇到GPU崩溃时,调用堆栈和日志可能会显示消息,例如“GPUCrash - exiting due to D3 D device being lost -D3 D Hung”和“DXGI_ERROR_DEVICE_REMOVED with Reason:DXGI_ERROR_DEVICE_HUNG.“

GPU崩溃可能因各种原因而发生,例如:

内存不足(OOM)

执行昂贵操作时超时(TDR事件)

引擎代码中的一个错误

驱动程序中的一个错误

操作系统中的一个bug

硬件方面的问题

由于这些原因,在像虚幻引擎这样的应用程序中,不可能总是知道为什么会发生崩溃,并且可能无法在应用程序级别避免崩溃。 下面的部分为您提供了一些调试选项,以帮助您确定根本原因和可以采取的一些预防措施。

GPU崩溃

当虚幻引擎中发生崩溃时,您可能希望首先查看Crash Reporter生成的调用堆栈和日志文件,这些文件包含有助于了解发生了什么的信息。然而,当GPU崩溃发生时,CPU调用堆栈并不真正指向崩溃的真正原因,而只是指示GPU崩溃发生时CPU正在做什么。因此,它没有提供可采取行动的信息。

有两个调试命令行参数可用于输出包含有用信息的日志。

-gpucrashdebugging在调试GPU崩溃时收集GPU进度并跟踪当前GPU状态。

-d3ddebug提供有关D3D管道的信息。

我们强烈建议不要同时使用这些命令行参数。您应该分别使用每个标志运行引擎以生成日志。

在使用这些命令行运行引擎并发生崩溃后,日志将保存在[Your Project]/Saved/sender文件夹中。

当应用程序在Windows中崩溃时,它会生成转储文件,这些文件也有助于诊断崩溃。您可以在Microsoft的Visual Studio文档中了解有关在Visual Studio调试器中使用转储文件的更多信息。

解决GPU内存不足(OOM)问题

如果GPU内存不足,可能会导致崩溃。这在很大程度上取决于所使用的RHI,有些比其他更有弹性,在OOM事件的情况下,它们可能会变慢而不是死亡。

要了解为什么会发生内存不足崩溃,请从Windows任务管理器开始,并使用性能选项卡。在这里,您可以选择您的GPU(1)并查看其可用内存以及当前消耗的内存量(2)

Windows任务管理器显示GPU的当前统计信息,包括其可用内存和当前消耗量。

打开并运行项目后,您可以看到消耗了多少GPU内存,而可用的内存是多少。如果您接近可用内存限制,这很可能是导致崩溃的问题。在这种情况下,尝试以下操作:

关闭其他可能消耗大量GPU内存的程序。

使用较低分辨率的纹理、较低分辨率的网格、剔除以减少场景中的对象等来渲染场景。

使用较低的屏幕分辨率。

在编辑器中工作时,可以使用“级别视口屏幕百分比”以较低的分辨率进行渲染。

在编辑器中工作时,如果打开了多个视口,请关闭除一个之外的所有视口。

避免禁用Niagara或光线跟踪等主要功能。

对这些组件进行重新配置会改变许多事情,这可能会导致对GPU崩溃原因的无效结论。

了解昂贵操作导致的GPU超时(TDR事件)

当CPU向GPU发送一个命令来计算某个东西时,CPU会设置一个计时器来计算GPU需要多少时间来完成该操作。如果CPU检测到操作花费的时间太长(默认情况下,Windows中为2秒),则会重置驱动程序,导致GPU崩溃。这被称为TDR事件(或TDR检测和恢复)。

理想情况下,引擎不应该向GPU发送触发TDR事件的工作量。相反,引擎应该能够将任务分割成更小的块,以避免TDR。为了避免这些类型的事件,您可以通过编辑Windows注册表来增加发生超时所需的时间(请参阅下面的步骤How to Resolve TDR Events)。

使用光线跟踪的TDR事件

硬件光线跟踪成本特别高,并且在启用时更有可能触发TDR事件。某些开销较大的光线跟踪过程(例如分辨率非常高的光线跟踪全局照明)可能需要很长时间来渲染,并可能触发TDR事件。

最昂贵的光线跟踪过程(全局照明和反射)提供了一种使用以下控制台变量在平铺中渲染过程而不是单个过程的方法:

r.RayTracing.GlobalIllumination.RenderTileSize

r.RayTracing.Reflections.RenderTileSize

当通道的图块大小大于0时,这些通道被渲染为NXN像素图块,其中每个图块作为单独的GPU命令缓冲区提交。这允许在不触发超时检测的情况下进行高质量渲染。

如何解决TDR事件

避免TDR事件的一种方法是通过编辑Windows注册表项来增加Windows触发TDR事件所需的时间。在本指南中,您将创建两个新的注册表项:TdrDelay和TdrDiDelay。

TdrDelay设置超时阈值。它是GPU延迟来自处理处理和内存(VRAM)的GPU调度程序的抢占请求的秒数。

TdrDdiDelay设置操作系统(OS)允许线程离开驱动程序的时间量。在该时间过去之后,发生超时延迟故障。

若要了解有关注册表项的更多信息,请参阅Microsoft有关Tdr注册表项的文档。

更改Windows操作系统上的注册表项可能会产生意想不到的后果,并且需要完全重新安装Windows。虽然在本教程中添加或编辑注册表项不会导致这些后果,但我们建议您在继续之前备份系统。Epic Games不对修改系统注册表对您的系统造成的任何损害负责。

您需要添加两个注册表项到您的图形驱动程序。按照以下步骤添加注册表项。

在Windows操作系统搜索栏中键入“run”。打开Run应用程序。

点击图片查看完整尺寸。

在搜索字段中,键入“regedit”。单击确定打开注册表编辑工具。

点击图片查看完整尺寸。

导航到注册表编辑工具左侧导航的GraphicsDrivers部分。这个位置是#1。

3.点击图片查看完整尺寸。

需要将注册表项添加到GraphicsDrivers文件夹中,而不是添加到其子文件夹中。确保选择正确的文件夹。

4.您需要的注册表项称为TdrDelay。如果此注册表项已存在,请双击以编辑它。如果它不存在,请在右侧窗格中单击鼠标右键,然后选择“新建DWORD(32位)值”。

将基数设置为decompression。将TdrDelay的值设置为60。单击“确定”完成。

您需要第二个名为TdrDdiDelay的注册表项。如果此注册表已存在,请双击以编辑它。如果它不存在,请在右侧窗格中右键单击并选择“新建DWORD(32位)值”以创建它。

将基数设置为decompression。将TdrDdiDelay的值设置为60。单击“确定”完成。

您的注册表现在应该包括TdrDelay和TdrDdiDelay。

点击图片查看完整尺寸。

关闭注册表编辑器。

重新启动计算机以使这些更改生效。

通过添加这些注册表项,Windows现在将等待60秒,然后确定应用程序的进程花费的时间过长。

虽然这是一个很好的方法来遏制基于渲染的GPU崩溃,但这不会解决所有崩溃。如果您尝试一次处理太多数据,无论您设置了多长时间的超时延迟,GPU都可能超时。此解决方案的设计只是为了给给予您的显卡一点额外的时间。

调查引擎代码、驱动程序和操作系统中的错误

引擎代码、驱动程序或操作系统中的错误也可能导致GPU崩溃。当OOM和TDR事件作为根本原因被消除时,您可以通过以下一些常见操作来开始调查GPU崩溃的原因。

使用-gpucrashdebugging和-d3ddebug运行发动机(如前所述分别运行)。

使用-onethread和-forcerhibypass运行引擎,以强制引擎仅使用一个线程运行。这有助于确定潜在的问题是否是线程/计时问题。

使用r.RDG.Debug=1运行引擎以提供有关未正确设置的渲染过程的信息。

使用r.RDG.ImmediateMode=1运行引擎,以强制渲染依赖关系图(RDG)在创建后立即执行过程。它可以给你给予更有意义的调用栈。请注意,这可能会给你给予误导性的线索,因为它也改变了其他事情。它仍然值得用于调查目的。

切换到不同的RHI。例如,如果您使用的是DirectX 12(DX12),则可以切换到DirectX 11(DX11)。如果崩溃只发生在其中一个,这可能有助于确定问题是在更高或更低的水平。请注意,某些功能仅适用于特定的RHI(例如仅DX12支持的硬件光线跟踪)。

对场景使用A/B测试:

打开和关闭渲染过程以检查是否发生崩溃。很多时候,问题是一个错误的通行证和做这种类型的检查可以给给予很好的线索是怎么回事。

打开和关闭渲染功能,例如Lumen、Nanite和光线跟踪。请注意,其中一些可能需要重新启动系统。

隐藏/显示场景中的特定对象。如果问题与特定资产相关,则可以隔离。

当考虑GPU崩溃是否与特定驱动程序相关时,上述所有信息都适用,您还应该获得最新的驱动程序。您可能还需要与制造商检查此驱动程序可能导致的已知问题。

当考虑GPU崩溃是否与操作系统有关时,上述所有信息都适用。此外,对于Windows,我们强烈建议使用版本20H2。您可以通过按Windows键并键入winver来了解您正在使用的Windows版本。

        解决方法翻译自https://dev.epicgames.com/documentation/en-us/unreal-engine/how-to-fix-a-gpu-driver-crash-when-using-unreal-engine?application_version=5.0



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有