最近,我的研究代码在 GPU 密集型绘制操作期间(或可能在几毫秒后)崩溃,导致系统立即重启。作为测试,我让我的代码在每次绘制操作后立即保存一个文件。我注意到,当发生崩溃并重新启动机器时,最后写入的文件偶尔会被损坏。它可能比正常情况短,好像写入被中断了。或者,更有趣的是,它可能以一长串空字符结尾。我有一个示例文件,它在一长串浮点值中间被切断。在数十万个正确打印的浮点数之后,文件末尾有一长串空字符:
...0.501071078140873482631434399082 0.846616753214301076546632884856 -0.21299023\x00\x00\x00\x00\x00...
在这个例子中,文件结束前大约有三百万个空值。我相信文件的总长度仍然比它应该的长度短。
起初我以为这是我的代码出了问题,可能是由于不稳定的 NVIDIA 驱动程序导致 GPU 方面出现了一些内存管理问题,从而导致整个系统崩溃。然而,我很快意识到我遇到了硬件问题,因为我的显卡的其他用途(如 Fire Strike 和 Heaven 基准测试)也导致了相同的系统重启。
更换电源似乎已经停止了崩溃。但我想确保我制作的损坏的保存文件是由于电源在写入过程中发生故障而导致的,而不是由于我的代码中一些难以发现的偶然错误。这需要假设由 GPU 负载引起的 PSU 故障可能需要几毫秒的时间才能发生,这段时间足以让我的代码的绘制操作完成并开始文件写入。
我曾考虑过通过关闭新 PSU 上的电源开关来验证这一点,同时保存相同类型的文件并在重新启动后查找其中相同的空字符串。我宁愿在做如此危险的事情之前四处打听。
我运行的是 Windows 8.1 64 位。磁盘是固态混合硬盘:Seagate FireCuda SSHD 2TB(ST2000DX002-2DV164)。