其实和 Rust 的关系不太大,大家就看个乐呵。
昨天花了一天,测试自己写的一个小工具,语言是 Rust
由于输入的数据是没变的,也没有引入随机数,所以每次运行的结果都应该是一样的。
但是,我反复运行,将输出的结果保存,再进行比较:结果总是随机出现不一致的情况,而且出现的位置也不一样。 而且只有在数据量足够巨大的情况下才出现,我难以调试。
刚开始以为是依赖的某个第三方库实现得有问题,换了 C 绑定版本的库,“随机出现不一致”依旧。( C 绑定的那个库对应的 C 代码在许多别的软件中也有用到,这个实现应该不会有问题)
然后我又怀疑到是不是自己多线程部分写得有问题,结果用单线程龟速跑了好几次还是有同样的问题。而且查来查去,这么简单的一个多线程操作,怎么会写错呢?
最后的最后,想起了一个新闻“AMD AGESA 1.2.0.5 BIOS 或会造成性能损失,系统稳定性也会变得更差” (传送门),又想到刚升这个 BIOS 的时候,AIDA64 的压力测试直接 Error 了。
赶紧进 BIOS ,关掉了内存 XMP ,内存降频到了 2166MHz 。重启,进系统,重新跑,问题解决,所有结果完全一致!
于是,下载了 AGESA 1.2.0.3 ,降级重刷了 BIOS ,开启 XMP ,内存拉到 3200MHz 。进系统,重新跑,结果依然一致,没有问题。
结论: 要想测试软件是否有内存问题,首先要保证硬件没有内存问题
各位用 AMD 的群友,可以检查一下自己的 BIOS 版本
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.