其实和 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 版本
1
chniccs 2022-03-17 11:25:01 +08:00
我碰到这问题估计不会想到什么新闻,只能 WC 然后关 ide->关机
|
2
xiaowei0823 2022-03-17 11:36:19 +08:00 via iPhone
正在用 5600X ,内存超频使用 + 机器低负载的时候会随机重启,累了
|
3
EPr2hh6LADQWqRVH 2022-03-17 11:46:10 +08:00
要不然? 为啥 ECC 内存要加钱?
|
4
Symo 2022-03-17 11:46:28 +08:00 1
@xiaowei0823 应该是开了 PBO2 吧, 防掉压开高点. 低负载的时候 cpu 电压太低会死机
|
5
xiaowei0823 2022-03-17 11:49:12 +08:00 via iPhone
@Symo 全默认只开了 XMP
|